2

ビューをよりシンプルにするために、NHibernate を NullObject パターンと共に使用しています。ここでJames Gregoryが見つけた解決策を使用します

public Address GetAddressOrDefault()
{
  return Address ?? new NullAddress();
}

Person には Address プロパティなどがあります。

住所のない人の Person オブジェクトを保存しようとするまで、これは非常にうまく機能しています。NullPerson オブジェクトの新しいインスタンスを作成したので、NHibernate はそれを保存しようとします。そして私にこれを与えます:

ids for this class must be manually assigned before calling save():

NHibernate に NullObject を保存させないようにする方法はありますか? または、これを攻撃する他の方法はありますか?

4

2 に答える 2

3

このイベントは、SaveまたはSaveOrUpdateで発生します。おそらくできることは、独自のSaveOrUpdateリスナーを作成することです。これにより、NullObjectがnullに戻されます。

public class MySaveOrUpdateEventListener : ISaveOrUpdateEventListener
{
    public void OnSaveOrUpdate(SaveOrUPdate @event)
    {
        if (@event.entity is Person)
        {
            var person = (Person)@event.entity;
            if (person.Address is NullAddress)
                person.Address = null;
        }
    }
}
于 2011-12-01T17:24:37.057 に答える
1

おそらくこれを検討したことは知っていますが、最も簡単な解決策は逆のようです

public Address GetAddressOrDefault()
{
  return Address ?? new NullAddress();
}

つまり、save 呼び出しの前に:

public Address GetAddressOrNull(Address address)
{
  return address is NullAddress ? null : address;
}

または...物事がより複雑になる場合は、ViewModel に専用のクラスを使用し、AutoMapperを使用してサルの作業を行うことを検討することもできます。

于 2011-12-01T14:15:21.950 に答える