我在NHibernate中收到「保存未保存的瞬態實體」錯誤。我有一個聚合根,neighborhood
包含addresses
和person
,這裏的一些快速的僞代碼解釋關係:一次在NHibernate中保存多個子實體
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();
在我的代碼我會經常想要創建並同時關聯Address和Person:
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
,然後再保存。
有什麼我錯過,使這更容易?這看起來像是一個常見的用例,我不想爲數據庫做大量的往返操作。
我錯過了第二個Cascade All,謝謝! – 2010-09-20 18:01:24