1

私のプロジェクトは、PresentationLayer、BusinesLogicLayer、DataAccessLayer に分かれています。作成されたすべてのオブジェクトは、これらのレイヤーを通過します。単純化すると:

SetFilter.xaml.cs

FilterFactory fFactory = new FilterFactory();
Filter myFilter = fFactory.Create(someClient, time, message);
FilterBLO filterBLO = new FilterBLO();
filterBLO.Save(myFilter);

FilterBLO.cs

FilterDAO filterDAO = new FilterDAO();
using (TransactionScope transcope = new TransactionScope())
{
    filterDAO.Save(myFilter);
    transcope.Complete()
}

FilterDAO.cs

using(DBDataContext dbdc = new DBDataContext)
{
    dbdc.Filter.InsertOnSubmit(myFilter);
    changeSet = dbdc.GetChangeSet();
    dbdc.SubmitChanges()
}

フィルターは、 とを含むテーブルClientを使用してテーブルに接続されます。(多対多の関係)ClientFilterFilterIDClientID

新しい 3 つのオブジェクトを作成するとすべて問題ありませんがClient、データベースに存在している場合 (また、別のオブジェクトと別のオブジェクトを使用しているClientBLO場合)、エラーが発生します:ClientDAOTransactionScopeDBDataContext

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

(他の同様のスレッドを検索しましたが、問題の解決策が見つかりませんでした。)

そして最後に私の質問

データベースに存在する場合、どのように保存myFilterすればよいですか。datacontext でClient試してみましたが、同じエラーが発生します。Attach()FilterDAO.cs

4

1 に答える 1

3

InsertOnSubmittheFilterに使用するのと同じDataContextを使用してデータベースからクライアントを取得する必要があります。次に、InsertOnSubmitの前に、そのオブジェクトを使用してFilterオブジェクトにClient値を設定する必要があります。

于 2011-11-08T14:06:26.623 に答える