我有一個簡單的多對多關係使用流利NHibernate,它工作得很好。如何避免流利NHibernate多對多關係內的子更新?
這是我的第一類映射:
public LobMapping()
{
...
HasManyToMany(x => x.Commodities)
.Table("PPBSYS.LOB_COMMODITY")
.ParentKeyColumn("LOB_ID")
.ChildKeyColumn("COMMODITY_ID")
.Cascade.SaveUpdate()
.LazyLoad();
...
}
這裏是我的第二類映射:
public CommodityMapping()
{
...
HasManyToMany(x => x.Lobs)
.Table("PPBSYS.LOB_COMMODITY")
.ParentKeyColumn("COMMODITY_ID")
.ChildKeyColumn("LOB_ID")
.Inverse()
.Cascade.All()
.LazyLoad();
...
}
最後,我LOB對象具有商品的列表:
public class Lob
{
...
public virtual IEnumerable<Commodity> Commodities { get; set; }
...
}
但是我不滿意這個事實,我必須參考Lob類中的整個商品。我真的想這樣做:
var lob = new Lob();
lob.Commodities = new [] { new Commodity { CommodityId = 1 }};
repository.SaveLob(lob);
但是,如果我運行上面的代碼,NHibernate的會嘗試更新列商品表設置爲null與ID = 1
商品所以其實我必須把整個對象,節省了高球前:
var lob = new Lob();
lob.Commodities = new [] { repostitory.GetCommodit(1) };
repository.SaveLob(lob);
我知道商品存在,因爲用戶只選擇了他們。
可以完成我的任務嗎?
你不能給它一個完整的實體,只是ID進行着,當然它將嘗試刪除其中的所有內容,您可以嘗試(不知道它是否會起作用):使用您在許多「COMMODITY_ID」中設置的相同名稱映射商品的keyColumn,並嘗試僅設置該列並保存,這對於我來說簡單的HasMany –
實際上,Commodity的主鍵是CommodityId(與NN關係相同)。 – gustavodidomenico