2011-01-22 16 views
1

私はasp.net MVC Webアプリケーションを実装しています。ここでは、データベースのデータを操作するためにLinq to Sqlを使用しています。私の行動では、私は以前の挿入IDを参照することによってお互いに依存する複数のテーブルエントリを挿入したい。だから私はちょうどトランザクションを処理する方法を知っているwnat開始トランザクション、コミット、ロールバック、すべてのADO.netのような。これを管理する方法。操作の途中で挿入がクラッシュするとどうなりますか?LinqのトランザクションをSQLに処理する

注: - 私はここでストアドプロシージャを使用していません。私はラムダ式とメソッドを使用しています。また、これらは異なるマネージャクラスで使用されます。 例: 作成の場合SubjectImageを挿入するSubjectManagerクラスのSubject-usedメソッドで、Subject Idが返されます。このsubjectidの中で、私はチャットマネージャークラスの別のメソッドでChapterManagerを挿入しています。このチャペルIDの基底に章のトピックを挿入してチャプターIDを返します。これは、上記のようなTopic Managerを同じく使用しています。それぞれのmangerクラスで、同じもののdataContextオブジェクトを作成しています。私はコントローラ内の単一のアクション内でこれをすべて制御しています。トランザクション管理については心配しています。私はここでどのように使うことができますか?

答えて

1

ニールの回答のためにコードが削除されました。

+0

ありがとうございます、データ操作全体でうまくいくのでしょうか? –

+0

はい、TransactionScope内のすべてがトランザクションにラップされます。注意する必要があるのは、datacontextだけです。私はあなたが範囲内に1つだけ持つことができると思います。もう少し情報を表示するようにコードを更新します。 –

+0

同じDataContextブロック内で複数のSubmitChangesを呼び出すときに問題が発生します。組み込みチェンジ・トラッキング・メカニズムは、変更が行われた後にオブジェクトを更新しないため、変更が行われた後にデータの整合性を保証することはできません。 –

1

DataContextにはすでに埋め込みトランザクションオブジェクトが含まれています。たとえば、顧客に対して新しい注文を行うとします。次のコードでCustomerおよびOrde​​rテーブルの両方を1つのSubmitChangesで更新できるようにモデルを設定できます。 2つのテーブル間に外部キーの関係が存在する限り、埋め込みトランザクションオブジェクトは、同じトランザクション内のCustomer更新とOrder挿入の両方を処理します。 TransactionScopeオブジェクトを使用して単一のDataContextを格納すると、重複しています:

using (DataContext dc = new DataContext()) 
{ 
    Order order = new Order(); 

    order.ProductID = 283564; 
    order.Quantity = 7; 
    order.OrderDate = DateTime.Now; 

    Customer customer = dc.Customers.Single(c => c.CustomerID == 6); 

    customer.LastUpdate = order.OrderDate; 
    customer.Orders.Add(order); 

    dc.SubmitChanges(); 
} 
関連する問題