无法使用InsertOnSubmit()插入新的Employee实体

时间:2011-07-07 09:31:48

标签: asp.net-mvc linq-to-sql

我正面临这个例外An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported。当我尝试将新实体插入我的Employees表(主表)时。

主Employees表和详细Orders表之间存在关系,我确信这两个表(特别是Employee.Orders EntitySet)之间的关系是问题的原因,因为我删除了关系,它返回插入到Employees表中没有问题。

当我搜索问题时,我试图实现this blog post,但我的案例与博客文章中的案例不同:

  • 尝试更新时(当我尝试插入时)他面临异常。
  • 表格架构不同。

我该如何解决这个问题?

这是插入代码:

Employee emp = new Employee();
emp.Name = empName;    // empName is a local variable

// What should I default emp.Orders to?

dc.Employees.InsertOnSubmit(emp);
dc.SubmitChanges();

P.S:我的DataContext是在我的存储库中的类级别定义的,当我调用dc.SubmitChanges();时会抛出异常。并且我没有附加任何对象为什么会这么说?

3 个答案:

答案 0 :(得分:1)

这篇文章解释了使用Attach和Detach方法需要做什么: http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx

答案 1 :(得分:0)

我猜它除了雇员对象之外还试图保存其他东西,或者你没有向我们展示你的存储库中的完整代码。当您实例化DataContext对象(dc)时,尝试设置DeferredLoadingEnabled = false,并且ObjectTrackingEnabled = false并查看它是否有效。如果是这样,请尝试在SQL Server Profiler中查看SQL代码,看看它是否正在修改可能来自不同上下文的其他对象,如消息所示。

var dc = new MyDataContext() 
{ 
    DeferredLoadingEnabled = false, 
    ObjectTrackingEnabled = false 
}; 

答案 2 :(得分:0)

我的赌注是主键。

  • 您确定主键是否也设置在auto increment
  • 你呢 尝试更改名称,它是否有效?
  • 如果删除会怎样? 你的数据库中的所有行?你可以插一个吗?