0
我使用流利的nhibernate將父子關係映射到sql數據庫。
大部分時間我讓父實體保存它的子實體,它們被插入到1個事務中,如果我沒有弄錯,如果我使用.Inverse()和sql標識列,這是不可能的。
我遇到的問題是,在1具體情況下,我想更新子實體和只有子實體。
當我這樣做與我當前的設置的子記錄將失去它的父母的關係(如果父對象爲空)或將完全替換我的父對象(如果我插入一個虛擬父母只有一個ID)。
Nhibernate:直接更新子實體而不會反轉
有誰知道在不影響外鍵的情況下實現單個記錄更新的方法嗎?
我能想到一個手動的sql語句或存儲過程,但我希望有一個nhibernate方式。
我有以下設置(可簡化爲您提供方便):
public ProjectMap()
{
Table("Project");
Id(p=> p.Id);
HasMany(p => p.Risks).Not.LazyLoad();
}
public RiskMap()
{
Table("ProjectRisk");
Id(r=> r.Id);
References(r => r.Project).Column("ProjectId");
Map(r => r.Description);
}
public class Project
{
public virtual int Id { get; set; }
public virtual IList<Risk> Risks { get; set; }
}
public class Risk
{
public virtual int Id { get; set; }
public virtual string Description{ get; set; }
public virtual Project Project { get; set; }
}
你想做什麼?你可以發佈有問題的代碼嗎?更新從db加載的現有風險時,如果未手動設置,則Project屬性應保持不變。 – 2012-08-08 10:21:04
因爲我使用之間的肥皂服務(這是一個艱難的要求)我不序列化項目屬性。如果我這樣做了,那麼所有的子項目都會有它的父項目,並且我會有一個連續循環它們(更不用說傳輸的數據了)。即使參考對象在那裏,如果有其他更改,它仍然會被更新。 – Kristof 2012-08-08 10:25:40
爲了明確我在做什麼:mvc網站通過肥皂服務加載一個項目。在客戶端單擊它將1個風險對象發送回網絡服務器以保存在數據庫中。 – Kristof 2012-08-08 10:27:28