我正在使用实体框架。我有工人桌:
Worker(workerId, name, statusId)
我为具有导航属性的工人提供了POCO:
class Worker {
public virtual long workerId {get;set;}
public virtual string name {get;set;}
public virtual long statusId {get;set;}
public virtual Status status {get;set;}
}
为了插入worker,我使用相关值填充名称,状态ID甚至状态(导航属性)。 但是,它不是仅插入worker,而是插入状态并为相同的状态创建一个新行(即使我在状态对象中填充statusId和id)。
为什么要插入记录?..
答案 0 :(得分:0)
如果状态存在,则应使用该ID设置statusid。或者您必须获取该状态对象并将其分配给对象属性。
在以前的EF版本中,您必须获取状态对象或将entitykey值设置为status id。
答案 1 :(得分:0)
如果您不想创建新的状态,可以将>>状态附加到上下文中:
var myStatus = new Status { statusId = 123, ... };
var myWorker = new Worker { status = myStatus, ... };
context.Stati.Attach(myStatus);
context.Workers.Add(myWorker)
context.SaveChanges();
如果Worker.statusId
是一个公开的外键列,也应该可以简单地将它分配给新的Worker:
var myWorker = new Worker { statusId = 123, status = null, ... };
context.Workers.Add(myWorker)
context.SaveChanges();
此处导航属性status
为null
非常重要。
答案 2 :(得分:0)
要插入,只设置statusId并将状态保留为null 这将使插入没有重复的关联 如果填充状态对象,框架实体会将其视为新对象(或行)。