LINQ :: Использование статического DataContext для предотвращения проблемы параллелизма - PullRequest
1 голос
/ 12 июня 2009

Я столкнулся с некоторыми проблемами в моем проекте. когда я пытаюсь обновить сущность, это дает мне другой тип ошибок.

Я читаю из сети. эти ошибки потому что

1 - Я получаю объект класса сущности из метода, который создает DataContext локально

и в методе обновления id не обновляется, потому что здесь другой DataContext создается локально. (даже это не исключение)

Я нашел много статей, связанных с этой проблемой

1 - Добавление столбца метки времени в таблицу (не влияет на мой проект. Я пробовал это)

один парень сказал, что использует ОДИН 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();
        }

в этом случае я хочу обновить данные студента.

это решило мою проблему. но теперь вопрос.

Это хороший подход, чтобы использовать вышеописанную технику в веб-приложении ???

1 Ответ

7 голосов
/ 12 июня 2009

Это хороший подход для использования вышеупомянутой техники в веб-приложении ???

Нет. DataContext не является потокобезопасным. Вы не можете совместно использовать 1 DataContext для разных потоков, которые безопасно обрабатывают разные запросы.

Также - этот шаблон называется Singleton, а не Factory

...