使用流畅的 nhibernate 映射得到以下错误
“无法将值 NULL 插入到列 'TitleId'、表 'database.dbo.Issues';列不允许空值。更新失败。语句已终止。”
我有以下映射
标题表具有以下列Title.Id和Title.TitleCrossPromotionId
CrossPromoLinkups表具有PromoTitleId和TitleCrossPromoId,它们按该顺序链接到标题表
(如果第二列实际上与 Id 列相同,我知道这是糟糕的设计,但这是一个遗留系统,因此更改数据库会很痛苦)
这有效地使CrossPromoLinkups表成为为 Titles 表创建多对多的关系表(其中包含几个额外的数据列)
标题映射
HasMany<CrossPromotionLinkUp>(c => c.PromotionLinkUp)
.Table("dbo.CrossPromoLinkups")
.Cascade.SaveUpdate()
.Inverse()
.LazyLoad()
.KeyColumn("TitleCrossPromoId") //need to set the Id its mapped to (its not Title.Id its Title.CrossPromotionId
.PropertyRef("TitleCrossPromotionId")
;
HasMany<CrossPromotionLinkUp>(c => c.AdvertisedPromotionLinkUp)
.Table("dbo.CrossPromoLinkups")
.Cascade.None()
.Inverse()
.LazyLoad()
.KeyColumn("PromoTitleId"); //TitleCrossPromoId");
HasMany<Issue>(c => c.Issues)
.Table("dbo.Issues")
.KeyColumn("TitleId")
.LazyLoad()
.Cascade.SaveUpdate();
CrossPromoLinkups 映射
References(x => x.PromotionTitle, "PromoTitleId");
References(x => x.TitleCrossPromotion, "TitleCrossPromoId")
.Cascade.Delete()
.LazyLoad()
.PropertyRef("TitleCrossPromotionId");
请注意错误中它抱怨标题有很多的“问题”。当我尝试从 CrossPromoLinkups 中删除记录时,似乎正在尝试删除我认为的标题
var PromotionLinkupToDelete = PromotionLinkUp.SingleOrDefault(x => x.Id == crossPromoLinkupId);
PromotionLinkUp.Remove(PromotionLinkupToDelete);
我在映射上做错了什么?
谢谢