2015-10-25 74 views
0

我有这个-simplified-模型类:自动填充导航属性?

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

,且MVC网页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 .. - > no change
  2. 在请求中将ResourceId参数更改为“Resource”:{Id:“..”} - > transaction.Resource不再为空,但它没有查询Resource表以填充任何内容。 ..
  3. 标记资源是否为虚拟(延迟加载或Eager) - >没有更改

想法?

+0

您的JSON没有一个'Resource'属性。对于您的尝试#2,您是否期望框架可以通过'ResourceId'从数据库中获取'Resource'对象? –

+0

我不知道EF7,但是我知道你应该有一个DBContext对象,然后将你的模型附加到它上面,以便从数据库中填充模型 – mfarouk

+0

@FrankFajardo,True。 –

回答

1

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

因为它是实体框架7,所以在此时不能使用延迟加载,因为它尚未在框架中。

目前roadmap它列为高优先级和他们的状态:

这些功能是高优先级,但我们认为EF7将是绝大多数没有他们的应用程序提供释放。

所以取而代之,在您的查询您需要手动包括所有的导航属性,例如:

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

谢谢你的回应。我对我在Post方法中应该做什么感兴趣? –

+0

如果发布数据的应用程序正确发布,则没有什么不同。 – DavidG