Мой домен:
public class Person
{
public Person() { }
public virtual int PersonId { get; set; }
public virtual string Title { get; set; }
public virtual string FirstName { get; set; }
public virtual IList<Address> Addresses { get; set; }
}
public class Address
{
public Address()
{}
public virtual int AddressId { get; set; }
public virtual Person AddressPerson { get; set; }
public virtual string BuildingNumber { get; set; }
public virtual string AddressLine1 { get; set; }
}
Мое сопоставление:
public class AddressMap : ClassMap<Address>
{
public AddressMap()
{
Table("Address");
LazyLoad();
Id(x => x.AddressId).GeneratedBy.Identity();
References(x => x.AddressPerson).Column("PersonId").Not.Nullable();
Map(x => x.BuildingNumber).Length(250).Not.Nullable();
Map(x => x.AddressLine1).Length(100).Not.Nullable();
}
}
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Table("Person");
LazyLoad();
Id(x => x.PersonId).Column("PersonId").GeneratedBy.Identity();
Map(x => x.Title).Length(6).Nullable();
Map(x => x.FirstName).Length(100).Not.Nullable();
HasMany(x => x.Addresses).KeyColumn("PersonId");
HasMany(x => x.Applications).KeyColumn("PersonId");
}
}
Поэтому, когда я пытаюсь добавить адрес в список людей и сохранить, я получаю следующую ошибку:
объект ссылается на несохраненный переходный процесс
instance - сохранить временный экземпляр
до промывки. Тип:
Rise.Core.Domain.Address, Entity:
Rise.Core.Domain.Address
Я новичок в NHibernate, и меня немного смущает, что именно происходит. Я считаю, что мне нужно создать двунаправленный атрибут. Или я должен просто сохранять адрес самостоятельно после того, как я сохранил идентификатор лица session.SaveOrUpdate (Person), а затем session.SaveOrUpdate (Address)? Не уверен, что именно я делаю неправильно, мне нравится иметь список адресов на Person, который может быть лениво загружен, поскольку это действительно облегчает написание некоторого Linq.
Есть предложения?