插入工作线程时复制状态行
本文关键字:状态 复制 工作 线程 插入 | 更新日期: 2023-09-27 17:54:58
我正在使用实体框架。我有工人表:
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甚至状态(导航属性)。但是,它不是只插入工作者,而是插入状态并为相同的状态创建新行(即使我在状态对象中填充了statusId和id)。
为了插入,只设置statusId,将status保留为空
这将使插入没有重复的关联。
如果您填充状态对象,框架实体将其视为一个新对象(或行)。
如果状态已存在,则应该使用该id设置statusid。或者你需要获取那个状态对象并将它分配给对象属性。
在以前的EF版本中,您必须获取状态对象或将entitykey值设置为状态id。
如果您不想创建一个新的Status,您可以将状态附加到上下文:
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
是很重要的。