2010-11-26 3 views
0

NHibernateを使用してストアのリストをデータベースに保存したいと思います。ただし、各ストアに固有の制約があり、ストアが制約をトリガーすると、そのストアが停止する原因になります。NHibernate:一意の制約に当たったときに保存が中止されます

try 
{ 
    _storeRepository.Save(stores); 
} 
catch (Exception e) 
{ 
} 
finally 
{ 
    session.Commit(); 
} 

上記のコードに従って、ユニーク制約が適用される前のすべてのストアが保存されますが、後のストアは保存されません。リスト全体をループして重複をチェックしなくても、これをどのように修正できますか?

答えて

1

のルールは以下のとおりです。トランザクション内

  • 決してキャッチSQL(またはNH)例外。エラーの場合は
  • 、エラーの場合は全体のもの
  • から常にロールバック、は常には、セッションを破壊します。

NHセッションキャッシュが同期しなくなり、もう使用できなくなります。だから、「最終的にコミットする」ことは非常に悪いことです。

ビジネスロジックのデータベース制約に違反しないようにする必要があります。

0

常にSaveOrUpdateを使うことができるので、NHibernateは指定されたエンティティを持つエンティティがデータベースに存在する場合、そのエンティティを更新します。

+0

これは、同じオブジェクトが2回挿入されている場合を除いて、固有の制約に対処するのに役立つわけではありません。 –

関連する問題