【发布时间】:2010-09-20 17:27:44
【问题描述】:
我在 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然后再次保存。
我是否缺少一些东西来使这更容易?这似乎是一个常见的用例,我不想对数据库进行大量往返。
【问题讨论】:
标签: nhibernate fluent-nhibernate s#arp-architecture