两个线程和两个DataContexts插入两次

时间:2016-07-28 15:50:23

标签: c# entity-framework

我有一个使用EF6 ORM的应用程序。

我有一个创建新对象的方法。我还有一个负责应用程序日志记录的线程。它将LogObject排队并每5秒将其保存到数据库中..

因此。用户调用该方法来创建新对象:

map_size

记录器数据库保存方法如下:

using(DataContext context = new DataContext() {
   context.MyObjects.Add(new MyObject() { prop1 = "test" });
   context.SaveChanges(); // save #1
   Log("A new MyObject was created!"); // this method enqueues log info
}

save#1正确插入对象。 问题是save#2还插入了一个相同的MyObject()....

我分析了数据库并调试了进程。

2 个答案:

答案 0 :(得分:1)

每当您看到这样的行为时,请考虑上下文未跟踪该对象。您正在创建上下文并对其进行处理,以便可能无法跟踪对象,而对于EF,它被视为新对象,这就是它再次插入的原因。

您应该再次附加对象,以便EF跟踪它并且知道它不是新对象。

答案 1 :(得分:0)

将它们放在相同的上下文中可能吗?根据我的理解,你只会记录进入数据库的内容......这不需要"定时器功能"。或者选择另一个有更多控制权的ORM ......