我正在使用Linq to Sql连接与数据库协作,我的Windows窗体应用程序可以与多个线程协同工作,而这与DataClass不兼容。
我修改了支持MultipleActiveResultSets
的连接,我收到此错误"An item with the same key has already been added."
我搜索了这个问题,只得到了2个答案:
我想lock
DataClass并且不知道在哪里锁定它,我确信有人在多线程中成功使用了Linq to Sql。
答案 0 :(得分:2)
要扩展我在评论中所说的内容,并回答你的问题 - 我会将所有访问视为一个工作单元,例如(在某些数据访问类中):
public Order GetOrder(int id) {
// ctx could also be instantiated via an IoC/DI framework, etc
using(var ctx = CreateDataContext()) {
return ctx.Orders.SingleOrDefault(x => x.Id == id);
}
}
public void AddOrder(Order order) {
if(order == null) throw new ArgumentNullException("order");
// ctx could also be instantiated via an IoC/DI framework, etc
using(var ctx = CreateDataContext()) {
ctx.Orders.InsertOnSubmit(order);
ctx.SubmitChanges();
}
}
等。关键点:数据上下文不会无限期地保持打开状态并被竞争线程重用。