3

誰かがLINQで最高の例外処理メカニズムを提案できますか?次の関数があるとします。

public List<test_dataRange> GetDataRange()
{
    testDataContext = new ParentDataContext(conn);
    List< test_dataRange > dataRange = (from pp in testDataContext. test_dataRanges
                                                    select pp).ToList();

    return dataRange;
}

ここで適用できるLINQの最良の例外処理メカニズムは何ですか?また、トランザクションを使用するこれらの関数に最適な例外処理メカニズムは何ですか。たとえば、次のようになります。

 public void UpdateQAProperty(Data_QAProperty qaProperty)
        {
            parentDataContext = new ParentDataContext(conn);
            DbTransaction dbTransaction = null;
            parentDataContext.Connection.Open();
            dbTransaction = masterDataContext.Connection.BeginTransaction();
            parentDataContext.Transaction = dbTransaction;
            var property = (from y in parentDataContext. QAProperties
                            where y.Id == qaProperty.Id
                            select y).FirstOrDefault();
            property.Height = qaProperty.Height;
            property.Caption = qaProperty.Caption;
            property.Width = qaProperty.Width;
            property.Length= qaProperty.Length;

            parentDataContext.SubmitChanges();
            dbTransaction.Commit();

        }
4

1 に答える 1

1

あなたの linq クエリは問題なく動作すると思います。

var property = (from y in parentDataContext. QAProperties
                            where y.Id == qaProperty.Id
                            select y).FirstOrDefault();

ただし、FirstOrDefault基準を満たす最初のオブジェクトが返されるか、存在しない場合は null が返されます。

プロパティが である可能性があるにもかかわらず、nullセッターを続行します

 property.Height = qaProperty.Height;
 property.Caption = qaProperty.Caption;
 property.Width = qaProperty.Width;
 property.Length= qaProperty.Length;

プロパティが であるため、これは例外をスローしますnull

あなたの投稿からは、それが受け入れられるかどうかわかりません。(qaProperty.Id は null ですか? ゼロですか? 期待されるプロパティが見つからなかったのはなぜですか?)

いくつかの選択肢があります:

  1. プロパティがnullの場合、新しいものを作成してトランザクションに追加します
  2. プロパティが null の場合は適切にエスケープし、プロパティが見つからなかったことをユーザーに通知します

ロールバックは不要です。Entity FrameworkparentDataContext.SubmitChanges();に到達する前に失敗しました。が正常に呼び出された場合SubmitChanges、その作業単位内のすべてのレコードが更新されます。

ブロックに関しては、そこにusing貼り付けることができますtry-catch

于 2012-11-01T14:05:43.470 に答える