1

私のプロジェクトでいくつかの問題に直面しています。エンティティを更新しようとすると、さまざまな種類のエラーが発生します。

ネットから読んだ。これらのエラーの原因は

1 - DataContext をローカルに作成するメソッドからエンティティ クラスのオブジェクトを取得しています

ここでは別の DataContext がローカルに作成されるため、 update メソッドでは id は更新されません。(例外はスローしません)

この問題に関連する多くの記事を見つけました

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 ベースのアプリケーションで上記の手法を使用するのは良い方法ですか?

4

1 に答える 1

7

Web ベースのアプリケーションで上記の手法を使用するのは良い方法ですか?

いいえ。DataContext はスレッド セーフではありません。異なるリクエストを安全に処理する異なるスレッド間で 1 つの DataContext を共有することはできません。

また、このパターンは Factory ではなく Singleton と呼ばれます

于 2009-06-12T16:04:52.850 に答える