6
すべてのエンティティと値オブジェクトは、マーカーインターフェイスIEntity
とIValueObject
を実装しています。私はそうのようなコンポーネントとして扱われるためにそれらを設定している:Fluent NHibernateでコンポーネントのコレクションを自動作成する方法は?
public override bool IsComponent(Type type)
{
return typeof(IValueObject).IsAssignableFrom(type);
}
public override bool ShouldMap(Type type)
{
return typeof(IEntity).IsAssignableFrom(type) || typeof(IValueObject).IsAssignableFrom(type);
}
残念ながら、これは、値オブジェクトのコレクションを持っているエンティティがコンポーネントのコレクションとしてautomappedすることを許可していないようです。たとえば:
public class MyEntity : IEntity
{
public IList<MyValueObject> Objects { get; set; }
}
public class MyValueObject : IValueObject
{
public string Name { get; set; }
public string Value { get; set; }
}
はいつでも
IEntity
が
IValueObject
を実装タイプの
IList
を持っているように、という規則を定義するためにどのような方法があり、それは私が指定したかのようにマッピングされます:
HasMany(x => x.Objects)
.Component(x => {
x.Map(m => m.Name);
x.Map(m => m.Value);
});
私がしたくないことは、すべてのクラスに対してこれらのオーバーライドを手動で行い、値オブジェクトの各プロパティを何度も書き戻す必要があることです。