LINQ ::使用静态DataContext来防止并发问题

Moh*_*san 1 linq asp.net datacontext concurrency

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

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

1 - 我从本地创建DataContext的方法获取实体类的Object

并且在update方法中,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();
        }
Run Code Online (Sandbox Code Playgroud)

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

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

在基于Web的应用程序中使用上述技术是否很好?

Amy*_*y B 7

在基于Web的应用程序中使用上述技术是否很好?

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

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