2017-10-20 9 views
2

すべて、は、レコードが、私は戻ってデータベースに複数のレコードを保存しようとしている

DBConcurrencyExceptionを投げているかを決定する必要がある、と楽観的同時実行(データベース-WINS)を使用したいと思います。私のモデルでは、私は持っている

public class MySampleTable 
{ 
    [Key] 
    public int ID { get; set; } 
    public string SomeValue { get; set; } 
    [Timestamp] 
    public byte[] RowVersion{ get; set; } 
} 

私の見解では、ユーザは複数のレコードを一度に更新することができ、これが私のコントローラに渡される。

私は問題のないデータの追加と変更を行っていますが、DBConcurrencyExceptionに関するすべての例では、一度に1つのレコードしか更新されていないと想定しています。したがって、特定のレコードに対してDBConcurrencyExceptionが存在するかどうかを識別し、残りのレコードを(データベースへの複数回のトリップなしで)通過させる方法がありますか?

try 
{ 
    db.SaveChanges(); 
} 
    catch (DBConcurrencyException ex) 
{ 
    //How do I know which record(s) throw the exception 
} 
+0

、詳細で、例外を分析してみてください。 –

+0

これは明日の次のステップ(実際に例外を投げる必要があることを意味する)ですが、誰かがすでにこれを行って、私が列挙してエンティティタイプにキャストできるいくつかのプロパティを指し示すことができると考えていました。 – William

答えて

0

DbConcurrencyExceptionを使用する代わりに、DbUpdateConcurrencyExcelptionをトラップしてみてください。これは、例外の一部であるすべてのエントリを持つ例外のEntriesプロパティを公開します。非同期のためにも

try 
{ 
    db.SaveChanges(); 
} 
catch (DbUpdateConcurrencyException ex) 
{ 
    //do something with ex.Entries poperty 
} 

作品:まず

try 
{ 
    await _db.SaveChangesAsync(); 
} 
catch (DbUpdateConcurrencyException ex) 
{ 
    //do something with ex.Entries poperty 
} 
関連する問題