Fre*_*red 2 entity-framework data-modeling
何时使用导航属性是显而易见的。但是什么时候应该使用反向导航属性,什么时候不应该使用反向导航属性呢?
当我使用导航属性创建双向关系时,是否应该始终使用反向导航属性?
有什么指导原则吗?
我的指导原则是努力让事情变得简单。我不会在需要时才使用它们。:) 就像任何其他公共成员或方法(或任何与此相关的代码)一样,它只有在存在合理的情况下才应该存在。
逆属性的存在表明我可能将该实体视为顶级实体,并且需要能够引用它的相关实体。例如,客户包含订单,因此问题是订单是否应该引用回其客户?
如果我可以查询订单(与客户无关)并且希望能够在这些查询中访问客户信息,那么拥有逆属性是有益的。
var orderDetails = context.Orders.Where(o => o.OrderDate == DateTime.Today)
.Select(o => new
{
o.OrderId,
o.OrderNumber,
CustomerName = o.Customer.Name
}).ToList();
Run Code Online (Sandbox Code Playgroud)
与在查询中加入客户和订单以通过单向引用访问客户和订单详细信息相反。(我尝试凭记忆写一个例子,但它变得太丑太快了。:D)
没有意义的是“总是”有双向引用。例如,当您有类似地址和地址类型之类的内容时。AddressType 永远不需要知道该类型的地址列表,即使您确实想查询该详细信息,也可以很容易地通过单向引用进行过滤。地址(相对于地址类型)是顶级引用是有道理的,因为您可能希望引用来自客户的订单或来自订单的客户,这是有道理的。