我有两个实体Order
和Customer
,它们具有以下关系:
Order
* -1 Customer
({Customer
是Order
中的导航属性)
如果我很容易在CustomerId
中将Order
定义为外键,则可以通过以下代码来更新Customer
的{{1}}:
Order
但是,如果我没有在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();
}
中定义CustomerId
,是否有任何类似的方法可以在不加载Order
实体的情况下更新此关系?
以下代码导致运行时错误:
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();
}
作为导航属性。
答案 0 :(得分:1)
相互声明两个具有导航属性的类。在其主键上使用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; }
}
迁移后,您可以执行以下操作:
using(var ctx = new MyContext)
{
var ord = new Order{ Id = 1, Customer = new Customer {Id = 10}};
ctx.Orders.Add(ord);
ctx.SaveChanges();
}