插入worker时重复的状态行

时间:2011-05-04 16:05:17

标签: c# .net entity-framework

我正在使用实体框架。我有工人桌:

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)。

为什么要插入记录?..

3 个答案:

答案 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();

此处导航属性statusnull非常重要。

答案 2 :(得分:0)

要插入,只设置statusId并将状态保留为null 这将使插入没有重复的关联 如果填充状态对象,框架实体会将其视为新对象(或行)。