【发布时间】:2018-09-09 06:49:02
【问题描述】:
我有两个实体 Order 和 Customer 具有以下关系:
Order*-1Customer
(Customer 是Order 中的导航属性)
如果我将CustomerId 定义为Order 中的外键,我可以通过以下代码轻松更新Order 的Customer:
using(var ctx = new MyContext)
{
var ord = new Order{ Id = 1, CustomerId = 10 };
ctx.Orders.Attach(ord);
ctx.Entry(ord).Property(x=>x.CustomerId).IsModified = true;
ctx.SaveChanges();
}
但是如果我没有在Order 中定义CustomerId,有没有类似的方法可以在不加载Customer 实体的情况下更新这个关系?
以下代码导致运行时错误:
using(var ctx = new MyContext)
{
var ord = new Order{ Id = 1, Customer = new Customer {Id = 10}};
ctx.Orders.Attach(ord);
ctx.Entry(ord).Property(x=>x.Customer).IsModified = true;
ctx.SaveChanges();
}
因为我们不能使用Property()作为导航属性。
【问题讨论】:
-
那么订单类中到底有没有customerId字段?这很难理解
-
@TheGeneral:是的
-
但如果我没有在 Order 中定义 CustomerId -- 为什么不呢?这将是实现您所描述的最简单(也是显而易见)的方法(在不加载客户实体的情况下更新此关系)。
-
请阅读minimal reproducible example并采取行动。解释“导致运行时错误”。此外,您正在使用/遵循哪些信息建模和数据库设计参考?你对 FK 有什么看法?您似乎正在尝试解决一个非问题。 PS请通过帖子编辑澄清,而不是cmets。
标签: c# entity-framework foreign-keys ef-code-first navigation-properties