0

流暢な nhibernate で動作する NonUniqueObjectException 例外に固執しました。私は、いくつかのビジネスロジックを使用して、データベース内のいくつかのデータの存在をチェックするサイクルを持っています。データが DB でない場合は、追加する必要があります。ただし、このサイクル内のすべての操作は同じトランザクションで行われます。これは、サイクル本体がどのように見えるかです:

 // Open session, start transaction
 if(!_service.CheckIfEntityInDb(entity))
 {
   entity = new entity() {var1 = value1, var2 = value2};
   _service.SaveOrUpdate(entity);
 }

私はすでに を使用しようとしましたmergeが、return me エンティティを空のフィールドとマージします。このエンティティは一種のマッピングであり、他のエンティティ タイプの 2 つのプロパティのみで構成されます。サイクルのすべてのステップでデータをコミットすることを除いて、この問題を解決するためのアドバイスをお願いします。ありがとう。

更新

public bool CheckIfEntityInDb(entity)
{
  Session.QueryOver<Entity>.Where(x => x.Id == entity.Id).Future().FirstOrDefault();
}

public bool CheckIfEntityInDb(entity)
{
  Session.SaveOrUpdate(entity);
}
4

1 に答える 1

1

自分でIDを生成していると仮定します

var entity = session.Get<Entity>(someid); // this uses the firstlevel cache

if (entity == null)
{
    entity = new Entity { Id = someid, var1 = value1, var2 = value2 };
    session.Save(entity);
}

ID によって生成された後に更新します。

ID を使用するため、セッションはどの ID が保存され、どの ID が保存されていないかを認識します。session.SaveOrUpdate(entity);エンティティが既知の場合は何もせず、新しいエンティティの場合はすぐに挿入を発行します

于 2012-05-29T11:20:03.940 に答える