2012-03-15 14 views
0

ここに私の問題です 私はちょうど挿入したものからIDを取得し、別のテーブルの外部キーとして使用したいと思います。LINQ to SQLちょうど挿入してロールバックする

Records record = new Records { 
    field1 = 1; 
    field2 = 2; 
}; 
DataContext.Records.InsertOnSubmit(record); 
DataContext.SubmitChanges(); // transaction 1 
int recordID = record.ID; 

tblDEMO demo = new tblDEMO { 
    rID = recordID 
    field1 = 1; 
}; 
DataContext.tblDEMOs.InsertOnSubmit(demo); 
sparxdc.SubmitChanges(); // transaction 2 

私がこれを行うと、2つのトランザクションが作成されます。 2番目が失敗した場合、最初のものをロールバックするにはどうすればよいですか?

答えて

0

使用すると、1つのトランザクション内の両方提出してOKしている場合:

using (TransactionScope scope = new TransactionScope()) 
{ 
    try 
    { 
     perform first submit 
     perform second submit 
    } 
    finally 
    { 
     scope.Complete(); 
    } 
} 
+0

優れています。これを行う良い方法はありますか(2回提出することなく)? – etlds

0

はInsertOnSubmitに呼び出し、任意の数の追加/メソッドを削除し、すべての変更が完了するときのSubmitChangesを呼び出します。 1つのTransactionScope内に手動で作成されたトランザクション。 (データベース内のリレーションがある場合)

var order = new Order(); 
Order.Customer = new Customer(); // here both order and customer represent your entities 
dbContext.InsertOnSubmit(); 
dbContext.SubmitChanges(); 

はあなたには、いくつかのより多くの情報を与えることができるので、あなたのエンティティが関連している可能性場合

+0

しかし、私は別のテーブルに挿入する前にIDを読み取る必要があります。そのため、私はSubmitChanges()を2回実行しています。 – etlds

0

あなたが作ることができますか?

+0

はい、それらは関連しています。私のデモでは、レコードテーブルIDに関連する外部キーを削除しています。 – etlds

0

いいえ、私は今何をすべきかを知っています。 外部キーに関連する2つのテーブルを挿入するには、これを行う必要があります。

Customer customer = new Customer(); 
Order order = new Order(); 
customer.Order.Add(order); 
DataContext.Customer.InsertOnSubmit(customer); 
関連する問題