0

asp.net アプリがオブジェクトを挿入または更新するためのビジネス レイヤー ロジックを作成しようとしています。ビジネスレイヤーからオブジェクトを取得し、それを元に戻してデータベースに保存しています。データ コンテキストはビジネス レイヤーに含まれており、これが例外の原因であると考えられます。

例外は、「別の DataContext から読み込まれた可能性があるため、新しくないエンティティをアタッチまたは追加しようとしました。これはサポートされていません。」

私はいくつかの小さな設定が欠けていると確信していますが、何がわからないのですか。

これは、挿入と更新を行っているコードです....

public static void Save(Order order)
{
        using (TicketInformationDataContext db = new TicketInformationDataContext())
        {                
            if (order.OrderID <= 0)
                db.Orders.InsertOnSubmit(order);
            else
            {
                db.ObjectTrackingEnabled = true;
                ITable table = db.GetTable(typeof(Order));
                table.Attach(order, true);
                db.Orders.Attach(order, true);
            }
            db.SubmitChanges();
        }
}
4

1 に答える 1

0

あなたの問題は、注文をロードするためと後で保存するための別々のコンテキストを作成していることだと思います。

リポジトリは、構築中に渡す (またはできれば IoC を介して注入する) ことができるコンテキストに対して機能するように設計する必要があります。そうすれば、両方の操作が同じコンテキストに対して機能します。

エンティティはそのコンテキストにバインドされており、それらを混在させようとすると、特に遅延初期化や関連付けられたエンティティで、あらゆる種類の問題が発生することに注意してください。

リポジトリの設計と作業単位の設計パターンについて説明している、この類似の質問に対する受け入れられた回答を参照してください。

于 2012-06-01T05:09:32.597 に答える