[英]One-to-one Mapping issue with NHibernate/Fluent: Foreign Key not updateing
簡介:父母和孩子班。 父母與子女之間一對一的關系。 父級具有FK屬性,該屬性引用子級的主鍵。 代碼如下:
public class NHTestParent
{
public virtual Guid NHTestParentId { get; set; }
public virtual Guid ChildId
{
get
{
return ChildRef.NHTestChildId;
}
set { }
}
public virtual string ParentName { get; set; }
protected NHTestChild _childRef;
public virtual NHTestChild ChildRef
{
get
{
if (_childRef == null)
_childRef = new NHTestChild();
return _childRef;
}
set
{
_childRef = value;
}
}
}
public class NHTestChild
{
public virtual Guid NHTestChildId { get; set; }
public virtual string ChildName { get; set; }
}
使用以下Fluent映射:
父映射
Id(x => x.NHTestParentId);
Map(x => x.ParentName);
Map(x => x.ChildId);
References(x => x.ChildRef, "ChildId").Cascade.All();
兒童制圖:
Id(x => x.NHTestChildId);
Map(x => x.ChildName);
如果我做類似(偽代碼)的操作...
HTestParent parent = new NHTestParent();
parent.ParentName = "Parent 1";
parent.ChildRef.ChildName = "Child 1";
nhibernateSession.SaveOrUpdate(aParent);
Commit;
...我收到一個錯誤:“此SqlParameterCollection的索引3無效,計數為3”
如果我按如下方式更改父級“參考”行(即提供我指向的子級屬性的名稱):
References(x => x.ChildRef, "ChildId").PropertyRef("NHTestChildId").Cascade.All();
我收到錯誤消息:“無法解析屬性:NHTestChildId”因此,我嘗試了“ HasOne()”引用設置,如下所示:
HasOne<NHTestChild>(x => x.ChildRef).ForeignKey("ChildId").Cascade.All().Fetch.Join();
在這種安排下,保存工作正常(並且db中的數據是所需的),但是加載無法找到子實體。 檢查SQL Nhibernate產生的SQL顯示,NHibernate假設父級的主鍵是到子級的鏈接(即,加載連接條件為“ parent.NHTestParentId = child.NHTestChildId”)。我指定的'ForeignKey'似乎被忽略了-如果事實上我可以設置任何值(甚至是不存在的字段)並且沒有錯誤發生-聯接總是失敗並且沒有子級返回。
我在上面嘗試了一些細微的變化。 看起來應該很簡單。 有任何想法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.