0

我正在使用 Linq to Sql 连接与数据库协作,并且我的 Windows 窗体应用程序与多个线程一起工作,这与 DataClass 不兼容。我修改了支持的连接MultipleActiveResultSets,我得到了这个错误"An item with the same key has already been added."我已经搜索了这个问题并且只有 2 个答案:

  • 仅在主线程中使用您的 DataClass;
  • 检索表时锁定DataClass;

我想要lockDataClass并且不知道在哪里锁定它,我确信有人在多线程中成功使用了Linq to Sql。

4

1 回答 1

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();
    }
}

等关键点:数据上下文不会无限期地打开并被竞争线程重新使用。

于 2012-09-04T20:08:37.810 回答