自动填充导航属性

本文关键字:属性 导航 填充 | 更新日期: 2023-09-27 18:19:08

我有这个简化模型类:

public class Transaction
{
    public string Id { get; set; }
    public virtual UserResource Resource { get; set; }
}

和一个Mvc Web Api控制器:

// POST api/values
[HttpPost]
public void Post([FromBody]Transaction transaction)
{
}

我的请求正文是这样的:

{"Id":"5520AEB9-DAD8-4C85-80A7-3257931B9790","ResourceId":"118547FC-0B3A-4816-820C-93BF2BA1BF14"}

在post方法中,事务。资源为空。我不知道如何使用我传递的资源Id来填充它…

我试过了:

  1. 添加public string ResourceId {get; set;}并将其标记为Transaction…->无变化
  2. 在请求中将ResourceId参数更改为"Resource":{Id:".."} ->事务。
  3. 资源不再为空,但没有查询资源表来填写任何内容。
  4. 将资源标记为虚拟或非虚拟(延迟加载或急于加载)->不更改

想法?

自动填充导航属性

你没有把Resource对象传递给你的API,你必须要么传递给它,要么让API找出它是什么,我不建议后者。

所以它是实体框架7,你不能在这个时间点使用延迟加载,因为它还没有(尚未)在框架中。

当前路线图将其列为高优先级,并声明:

这些特性是高优先级的,但是我们认为EF7对于绝大多数没有这些特性的应用来说将是一个引人注目的版本。

所以,在你的查询中,你需要手动包含所有的导航属性,例如:

var data = context.Transactions
    .Include(t => t.Resource)
    .Where(t => t.Id == 1);