C# 在不加载导航属性的情况下更新关系
我有两个实体C# 在不加载导航属性的情况下更新关系,c#,entity-framework,foreign-keys,ef-code-first,navigation-properties,C#,Entity Framework,Foreign Keys,Ef Code First,Navigation Properties,我有两个实体订单和客户,关系如下: 订单*-1客户 (Customer是Order中的导航属性) 如果我很容易将CustomerId定义为订单中的外键,我可以通过以下代码更新订单的Customer: using(var ctx = new MyContext) { var ord = new Order{ Id = 1, CustomerId = 10 }; ctx.Orders.Attach(ord); ctx.Entry(ord).Property(x=>x.C
订单
和客户
,关系如下:
订单
*-1客户
(Customer
是Order
中的导航属性)
如果我很容易将CustomerId
定义为订单中的外键
,我可以通过以下代码更新订单的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();
}
但是,如果我没有在订单
中定义客户ID
,有没有类似的方法可以在不加载客户
实体的情况下更新此关系
以下代码导致运行时错误:
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()
。相互声明两个具有导航属性的类。用主键上的ForeignKey
属性标记其中一个表(从属表)
public class Customer
{
public int Id { get; set; }
public ICollection<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
...
public int CustomerId { get; set; }
[ForeignKey("CustomerId")]
public Customer Customer{ get; set; }
}
那么order类中是否有customerId字段?这很难理解understand@TheGeneral:是的,但是如果我没有按顺序定义CustomerId,为什么不呢?这将是实现您所描述的最简单(也是最明显)的方法(在不加载客户实体的情况下更新此关系)。请阅读并采取行动。解释“导致运行时错误”。另外,您正在使用/遵循哪些信息建模和数据库设计参考?你对FKs有什么看法?你似乎在试图解决一个非问题。PS请通过帖子编辑澄清,而不是评论。但我不想定义外键。@Masoud为什么不?所以EF
无法理解它们之间的关系。
using(var ctx = new MyContext)
{
var ord = new Order{ Id = 1, Customer = new Customer {Id = 10}};
ctx.Orders.Add(ord);
ctx.SaveChanges();
}