我对实体框架有疑问....我不太了解。
我正在处理一项看似简单的任务,即将现有联系人与我正在处理的系统中的新订单相关联。在与订单关联之前,联系人将始终存在。
简化的数据库表...
订单
OrderID
状态已
创建
联系人 联系人
ID
名字
姓氏
ContactToOrderMap
OrderID
ContactID
我已经在 DbContext 中链接了这两个表。
modelBuilder.Entity<Order>()
.HasMany<Contact>(a => a.Contacts)
.WithMany()
.Map(a =>
{
a.ToTable("ContactToOrderMap");
a.MapLeftKey("OrderID");
a.MapRightKey("ContactID");
});
我编写了一个单元测试,它简单地创建一个订单,一个联系人,将联系人添加到订单上的列表成员并尝试保存。
// setup
var order = new Order() { // initialize required fields };
// add a contact that already exists in the database
var orderContact = new Contact() { ID = 2 };
order.Contacts.Add(orderContact);
// call
logic.Save(ref order);
最终,在执行了一些不相关的业务逻辑之后,这个订单被保存了......
// Add to collection
_db.Orders.Add(obj);
// Commit changes
_db.SaveChanges();
>> 在这里,我收到与联系人表上所需数据库字段相关的错误。 不是我要找的,因为我真的只想在 ContactToOrderMap 表中添加一个关联记录。
下一步,我尝试在保存订单之前从数据库中检索现有联系人。这段代码不是很干净,但它应该解释我正在尝试什么。
if (currentOrder.Contacts != null)
{
var matchedContacts = new List<Contact>();
foreach (var con in currentOrder.Contacts)
{
matchedContacts.Add(_contactLogic.Get(con.ID));
}
currentOrder.Contacts.Clear();
foreach (var item in matchedContacts)
{
currentOrder.Contacts.Add(item);
}
}
这创建了关联,但也创建了一个新的联系人(新的唯一 ID)。
目标是仅创建关联和新订单,而不是创建新联系人。
有什么想法或指示可以让我朝着正确的方向前进吗?
如果需要其他信息,请告诉我。
编辑:固定代码 - 将 obj 重命名为 currentOrder。