2009-03-27 4 views
2

私はホテル予約(予約)の作成、変更、削除のためのWebサービスに取り組んでいます。 1つの予約に複数の滞在が含まれることがあります(滞在は、部屋と注文されたサービスなどのリンクです)。各滞在には独自の期間がありますので、同じ予約で3泊分の滞在を3回行うことができます。C#LINQ DeleteOnSubmit()の状態

予約を変更する必要がある場合、私の問題が発生します。入力は予約ID(上記参照)と希望の滞在に関する新しいデータです。したがって、元の滞在が2つのシングルルームと1つのダブルルームで、それぞれが独自の開始日と終了日を持つ場合、お客様はシングルルームの1つをダブルルームに変更することを希望しました。何が変わったのかは分かりませんが、これは変わることはないので、これを変更することを提案する解決策はありません。私は、私はそれらを削除する前に、現在の滞在を選ぶと削除

var oldStays = (from stay in persistentStorage.DataContext.Stays 
       where stays.booking_id == bookingId 
       select stay); 
persistentStorage.DataContext.Stays.DeleteAllOnSubmit(oldStays); 

のためにそれらを設定するためにLINQを使用

は、しかし、私は新しい滞在のために利用可能なお部屋があることを確認する必要があります。簡単な方法は、LINQが自動的にこれらのレコードを新しいクエリを作成するときに削除されたものとみなす場合です(日付、既存の部屋などを心配する必要はありません)。その場合、問題は既に解決されています。

もしそうでなければ、私は新しい利用可能な予約をチェックすると同時に、変更されていない滞在を無視する必要があります(上記のケースでは、ダブルルームが所定の期間他のダブルとシングルは既に予約済みです)。 LINQがこれを手助けできるスマートな方法はありますか?あれば、どうですか?

答えて

5

あなたはトランザクションを使用して意図した動作を得ることができる必要があります:

  • トランザクションを作成し、新しい部屋が利用可能であり、すべての場合
  • それらを予約した場合
  • チェックをあなたの予約を削除OK、コミット
  • トランザクションをロールバックする

EDIT - サンプル(SQLトランザクションを使用して、あなたもTransactionContextを使用することができます):私の質問の

try 
{ 
    persistentStorage.DataContext.Transaction=persistentStorage.DataContext.Connection.BeginTransaction(); 

    var oldStays = (from stay in persistentStorage.DataContext.Stays 
       where stays.booking_id == bookingId 
       select stay); 
    persistentStorage.DataContext.Stays.DeleteAllOnSubmit(oldStays); 
    persistentStorage.DataContext.SubmitChanges(); 

    // do you select/insert/etc. 

    if (ok) 
    persistentStorage.DataContext.Transaction.Commit(); 
} 
finally 
{ 
    if (persistentStorage.DataContext.Transaction!=null) persistentStorage.DataContext.Transaction.Dispose(); 
    persistentStorage.DataContext.Transaction=null; 
} 
+0

パートは私がLINQツーSQLを介してこれを行うのですかどのように、でしたか?そして、SubmitChangesがトランザクションにすべてロールバックするところを読んでいますが、selectクエリを実行するときに、クエリを削除しないでください。 –

+0

トランザクションを定義しないと、暗黙のうちにonが返されますが、TransactionScopeを自分で定義すると、トランザクションを制御でき、SubmitChangesはコミットしません。 – laktak

関連する問題