自动填充导航属性?

时间:2015-10-25 23:45:54

标签: c# entity-framework entity-framework-core

我这个-simplified-模型类:

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方法中,transaction.Resource为null。而且我不知道如何使用我传递的资源ID来填充它...

到目前为止我尝试了什么:

  1. 添加public string ResourceId {get; set;}并在交易中将其标记为ForeignKey ... - >没有变化
  2. 在请求中将ResourceId参数更改为"资源":{Id:" .."} - > transaction.Resource不再为null,但它没有查询资源表来填写任何内容......
  3. 将资源标记为虚拟资源(延迟加载或急切) - >没有变化
  4. 想法?

1 个答案:

答案 0 :(得分:1)

您没有将Resource对象传递给您的API,您必须将其传递或让API弄清楚它是什么,我不建议使用后者。

因此,在它的实体框架7中,您不能在此时使用延迟加载,因为它尚未(在框架中)。

当前roadmap将其列为高优先级,并说明:

  

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

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

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