Я получаю сообщение об ошибке «Сохранить несохраненные временные объекты» в NHibernate. У меня есть совокупный корень, neighborhood
, который содержит addresses
и person
, вот несколько быстрых псевдокодов для объяснения взаимосвязи:
public class Neighborhood {
public virtual int Id { get; set; }
public virtual IList<Address> Addresses { get; set; }
}
public class Address {
public virtual int Id { get; set; }
public virtual string Address { get; set; }
public virtual Person Person { get; set; } //Assume only one person per address
}
public class Person {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
На моей карте Соседства есть:
mapping.HasMany(x => x.Addresses)
.Inverse()
.KeyColumn("NeighborhoodFk")
.Cascade.All()
.AsBag();
В моем коде я часто хочу создать и связать адрес и человека одновременно:
var address = new Address();
var person = new Person();
var address.Person = person;
var neighborhood = neighborhoodRepository.Get(id);
neighborhood.Add(address);
neighborhoodRepository.DbContext.BeginTransaction();
neighborhoodRepository.SaveOrUpdate(neighborhood);
neighborhoodRepository.DbContext.CommitTransation();
Я получу ошибку «несохраненные переходные объекты» для объекта Person
, поскольку он присоединен к переходному объекту Address
.
Единственный способ убедиться в этом - сначала сохранить address
, еще раз вызвать базу данных для обновления neighborhood
после обновления, найти только что добавленный address
, прикрепить person
и затем сохраните снова.
Что-то мне не хватает, чтобы сделать это проще? Это похоже на общий случай использования, и я не хочу делать кучу обходов в базу данных.