【问题标题】:LINQ :: Use static DataContext to prevent Concurrency ProblemLINQ :: 使用静态 DataContext 来防止并发问题
【发布时间】:2009-06-12 11:26:22
【问题描述】:

我在我的项目中遇到了一些问题。当我尝试更新实体时,它会给我不同类型的错误。

我从网上阅读。这些错误是因为

1 - 我从在本地创建 DataContext 的方法中获取实体类的对象

并且在更新方法中 id 不会更新,因为这里在本地创建了另一个 DataContext。 (即使它没有抛出任何异常)

我找到了很多与这个问题相关的文章

1 - 在表中添加时间戳列(在我的项目中不起作用。我试过这个)

有人说每个人都使用 SINGLE DataContext。

我通过创建以下类来做到这一点

public class Factory
    {
        private static LinqDemoDbDataContext db = null;

        public static LinqDemoDbDataContext DB
        {
            get 
            {
                if (db == null)
                    db = new LinqDemoDbDataContext();

                return db;
            }
        }
    }





public static Student GetStudent(long id)
    {
        LinqDemoDbDataContext db = Factory.DB;

        //LinqDemoDbDataContext db = new LinqDemoDbDataContext();

            Student std = (from s in db.Students
                          where s.ID == id
                          select s).Single();

            return std;

    }



 public static void UpdateStudent(long studentId, string name, string address)
        {
            Student std = GetStudent(studentId);

            LinqDemoDbDataContext db = Factory.DB;

            std.Name = name;
            std.Address = address;

            db.SubmitChanges();
        }

在这种情况下,我想更新学生详细信息。

它解决了我的问题。但现在的问题是。

在基于 Web 的应用程序中使用上述技术是一种好方法吗???

【问题讨论】:

    标签: asp.net linq concurrency datacontext


    【解决方案1】:

    在基于 Web 的应用程序中使用上述技术是一种好方法吗???

    没有。 DataContext 不是线程安全的。您不能在安全地处理不同请求的不同线程之间共享 1 个 DataContext。

    另外 - 这种模式称为 Singleton,而不是 Factory

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2011-01-13
    • 2023-03-30
    • 1970-01-01
    • 2022-10-26
    相关资源
    最近更新 更多