我有一些代码看起来像这样:
var customer = dbcontext.Customers.Find(1);
var order = new Order();
order.CustomerId = customer.Id;
dbcontext.Orders.Add(order);
dbcontext.SaveChanges();
最佳实践是这样做还是通过设置导航属性来设置关系:
var customer = dbcontext.Customers.Find(1);
var order = new Order();
order.Customer = customer; //Set navigation prop as opposed to FK field
dbcontext.Orders.Add(order);
dbcontext.SaveChanges();
什么方法被认为是最佳实践或首选?
我的建议是实体应该公开导航属性or外键,但不能两者兼而有之。如果您使用导航属性,请使用 FK 的影子属性 (EF Core)。
原因是更新并确保实体是always处于完整状态。当您同时拥有两者时,EF 不会同步它们,直到SaveChanges()
叫做。如果在更新和更新之间调用期望其中之一的代码,这可能会导致错误SaveChanges()
。 (验证调用等)即您设置了 FK,但随后一些代码检查了 Nav 属性。
在大多数情况下,我喜欢导航属性,但使用 FK 来引用我实际上不需要加载的引用(除了满足数据完整性之外),例如常量/枚举键,或者在我需要最大性能的情况下(例如批量更新操作)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)