我使用 Fluent 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 将尝试更新 Commodity 表,将 ID = 1 的商品的列设置为空。
所以实际上我必须在保存 Lob 之前获取整个对象:
var lob = new Lob();
lob.Commodities = new [] { repostitory.GetCommodit(1) };
repository.SaveLob(lob);
而且我知道商品存在,因为用户刚刚选择了它们。
有可能完成我的任务吗?