我正在使用流畅的nhibernate映射获得以下错误
“无法将值NULL插入列'TitleId',表中 'database.dbo.Issues';列不允许空值。更新失败。该 声明已被终止。“
我有以下映射
标题表包含以下列 Title.Id 和 Title.TitleCrossPromotionId
CrossPromoLinkups 表格有 PromoTitleId 和 TitleCrossPromoId ,它按顺序链接到标题表
(第二列如果与Id列有效相同,我知道设计不好但这是遗留系统,所以更改数据库会很痛苦)
这有效地使 CrossPromoLinkups 表成为一个关系表,为标题表创建多对多(其中包含一些额外的数据列)
标题映射
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 Mapping
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);
我对映射做了什么错误?
由于
答案 0 :(得分:0)
因为我不想删除标题,我需要将参考映射更新为以下内容:
References(x => x.PromotionTitle, "PromoTitleId")
.Cascade.None(); //dont delete the title