4
我有一對多的關係,不能級聯工作,一旦我設置級聯我只是得到「對象引用一個未保存的瞬態實例...」。流利的nhibernate一對多
我的映射看起來像這樣
public class SharedDetailsMapping : ClassMap<SharedDetails>
{
public SharedDetailsMapping()
{
Id(x => x.Id).GeneratedBy.Identity();
HasMany(x => x.Foos);
}
}
public class FooMapping : ClassMap<Foo>
{
public FooMapping()
{
Id(x => x.Id).GeneratedBy.Identity();
References(x => x.SharedDetails).Cascade.SaveUpdate();
}
}
這樣
public class Foo
{
public Foo()
{
SharedDetails = new SharedDetails();
SharedDetails.Foos.Add(this);
}
public Foo(SharedDetails sharedDetails)
{
SharedDetails = sharedDetails;
SharedDetails.Foos.Add(this);
}
public virtual Guid Id { get; set; }
public virtual SharedDetails SharedDetails { get; set; }
}
public class SharedDetails
{
public SharedDetails()
{
Foos = new List<Foo>();
}
public virtual Guid Id { get; set; }
public virtual IList<Foo> Foos { get; set; }
}
然後我想創建的Foo的類,而無需先保存SharedDetails如果新富,就像這樣:
using (var transaction = _session.BeginTransaction())
{
var shared = new SharedDetails();
var fooOne = new Foo(shared);
_session.SaveOrUpdate(fooOne);
var fooTwo = new Foo(shared);
_session.SaveOrUpdate(fooTwo);
transaction.Commit();
}
無法弄清楚我做錯了什麼,它的工作原理是如果我保存SharedDetail這是爲什麼我有Cascade設置。
問題是我不想首先保存'SharedDetails',我希望在創建'Foo()'時自動創建並保存它。這不可能嗎? – Christian
更改映射不會更改用於創建和保存的示例代碼。你仍然可以做你在你的例子中所做的。然而,這種映射的改變有助於NHibernate找出內部保存的順序。 – HackedByChinese
我已經嘗試添加'反向',但它仍然給出相同的錯誤。保存'SharedDetails'是有效的,但是這會破壞設置Cascade的目的。 – Christian