更新关系而不加载导航属性

时间:2018-09-09 06:49:03

标签: c# entity-framework foreign-keys ef-code-first navigation-properties

我有两个实体OrderCustomer,它们具有以下关系:

Order * -1 Customer

({CustomerOrder中的导航属性)

如果我很容易在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(); } 作为导航属性。

1 个答案:

答案 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();  
}