如果导航属性不存在,则插入导航属性,或者仅在没有键的情况下使用它

本文关键字:属性 导航 情况下 不存在 插入 或者 如果 | 更新日期: 2023-09-27 18:35:08

我有 2 个表:

Person table - 
       PersonID
       Name (unique index).
Orders table - 
       OrderID
       Price
       Item
       PersonID (FK)           

我想插入订单表(使用 EF),这将插入订单列表(所有订单都是同一个人,我只知道人名),我希望如果该人不存在于人员表中,他将入其中并且他确实存在订单将填充正确的人。我不想首先查询该人员是否在人员表中,因为这是一个冗余调用。是否可以仅在保存更改期间添加它并事先查询服务器?像这样:

Person thePerson = new Person {Name = "knownName"};
foreach (var order in orders)
{
   context.Orders.AddObject(new Order
   {
      Price = order.Price,
      Item = order.ItemName,
      Person = thePerson
   });
}
context.SaveChanges();

如果导航属性不存在,则插入导航属性,或者仅在没有键的情况下使用它

如果使用 PersonID 属性,EF 不会创建具有 Name 属性的 Person 对象,而是执行所需的操作。但是这种行为仅限于主键,所以我认为不可能使用 Name 来实现这一点。

Person thePerson = new Person {PersonID = Id}; // Id is either previously fetched or a newly created one
foreach (var order in orders)
{
   context.Orders.AddObject(new Order
   {
      Price = order.Price,
      Item = order.ItemName,
      Person = thePerson
   });
}
context.SaveChanges();