无法插入NULL - Fluent Nhibernate多对多关系删除映射

时间:2013-11-07 14:46:33

标签: c# asp.net nhibernate fluent-nhibernate

我正在使用流畅的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);

我对映射做了什么错误?

由于

1 个答案:

答案 0 :(得分:0)

因为我不想删除标题,我需要将参考映射更新为以下内容:

 References(x => x.PromotionTitle, "PromoTitleId")
                .Cascade.None(); //dont delete the title