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