Ну, я смотрел на свою модель, и мне пришло в голову, что NHibernate требует, чтобы все свойства были virtual
, чтобы разрешить отложенную загрузку . Он возвращает объект с классом, который наследует от оригинала. И я сделал то же самое.
Моя модель домена остается прежней:
public class Person
{
public virtual Guid Id { get; private set; }
public virtual Gender Gender { get; set; }
public virtual IEnumerable<Person> Children { get; set; }
}
Класс сущности для сопоставления:
public class PersonEntity : Person
{
public virtual IList<Person> FatherChildren { get; set; }
public virtual IList<Person> MotherChildren { get; set; }
public override IEnumerable<Person> Children
{
get
{
return Gender == Domain.Gender.Male ? FatherChildren : MotherChildren;
}
}
}
И отображение немного изменено для производного класса:
public class PersonMap : ClassMap<PersonEntity>
{
public PersonMap()
{
Table("People");
Id(x => x.Id)
.GeneratedBy.Guid();
HasMany<PersonEntity>(x => x.FatherChildren)
.KeyColumn("FatherId")
.Inverse()
.ReadOnly();
HasMany<PersonEntity>(x => x.MotherChildren)
.KeyColumn("MotherId")
.Inverse()
.ReadOnly();
Map(x => x.Gender);
}
}
Теперь у меня есть чистая модель!