2009-03-13 15 views
2

これは問題ありませんか?最初にエンティティを追加しようとします。追加に失敗した場合、それはエンティティが既に存在することを意味するため、問題ではありませんか?Entity FrameworkのCreateOrUpdateメソッドでtry-catchを使用しても構いませんか?

もっとエレガントな/簡単なソリューションがありますか?

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel(); 

try 
{ 
    dal.AddToXXXXXX(xxxxxxx); 
} 
catch 
{ 

} 

try 
{ 
    dal.SaveChanges(); 
    return true; 
} 
catch 
{ 
    return false; 
} 

OK私はこれを行うには確かにOK ない

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel(); 

if(xxxxxxx.ID == 0) 
{ 
    dal.AddToXXXXXX(xxxxxxx); 
} 

try 
{ 
    dal.SaveChanges(); 
    return true; 
} 
catch 
{ 
    return false; 
} 

答えて

7

...にそれを短縮。 C#で型なしのcatch文は、「標準または非標準例外をキャッチ」を意味します。しかし、重複追加を防ぐことが意図されています。追加は、既存のエントリを示すものではないさまざまな理由で失敗する可能性があります。たとえば、そのメソッドはnull参照をスローし、追加されたとみなします。

重複した追加をチェックする場合は、が重複追加のためにスローされる例外のみをキャッチする必要があります。

0

最初のTry-CatchをIfステートメントに置き換えることができますが、2番目のTry-Catchはまだ必要です。

編集:また、1つのブロック内のすべての例外を、それらの内容に関係なく捕捉することは推奨されません。

P.S. Catchブロックは、If文よりも処理能力(時間)を使います。

1

IfExistsスタイルのメソッドで開始し、実際に変更を加えない限り、変更を保存しないでください。

Lucasが指摘したように、try-catchブロックはcatchブロックに入るとオーバーヘッドが大きくなります。したがって、アイテムがすでに存在するかどうかを判断する方法がない限り、一般的に頼りにしたくありません。

Ifステートメントのジョブを実行するためにtry-catchを使用しないでください。試練は予期しない予期しない出来事のためのものです。あなたの更新されたコードで

EDIT 、あなたは「AddToXXXXXX」メソッドによってスローされます例外をキャッチするために失敗しています。

あなたが代わり

If(!XXXXXX.Contains(newItemValue)) 
{ 
    try 
    { 
     add... 
     savechanges... 
    } 
    catch 
    { 

    } 
} 

を行う必要があり、あなたは異なるのtry-catchブロックに追加し、SaveChangesメソッドを分離できますが、追加が失敗した場合でも、SaveChangesメソッドが実行されます場合にのみ必要です。

関連する問題