C# Don';如果所有属性都为空,则不保存实体

C# Don';如果所有属性都为空,则不保存实体,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,除了主键之外,我的ContactInfo类还包含所有可为空的属性(以及相应的数据库字段)。ContactInfo是另一个类OrgInfo的属性,在OrgInfo映射中,我将ContactInfo设置为Cascade.SaveUpdate()。在我的应用程序中,OrgInfo通常与空ContactInfo一起保存。结果,NHibernate在我的contact_info表中插入了大量的行,除了主键之外,所有字段都为空 我的问题是:如何阻止NHibernate插入这些行,并且仅当ContactInf

除了主键之外,我的ContactInfo类还包含所有可为空的属性(以及相应的数据库字段)。ContactInfo是另一个类OrgInfo的属性,在OrgInfo映射中,我将ContactInfo设置为Cascade.SaveUpdate()。在我的应用程序中,OrgInfo通常与空ContactInfo一起保存。结果,NHibernate在我的contact_info表中插入了大量的行,除了主键之外,所有字段都为空

我的问题是:如何阻止NHibernate插入这些行,并且仅当ContactInfo中至少有一个属性不为null时才进行保存?我希望有一种方法可以在映射中做到这一点,而不是使用条件逻辑和单独保存ContactInfo

提前谢谢

这是我的联系人信息地图:

public class ContactInfoMap : ClassMap<ContactInfo> {
    public ContactInfoMap() {
        Table("contact_info");
        LazyLoad();
        Id(x => x.ContactInfoId).GeneratedBy.Identity().Column("contact_info_id");
        Map(x => x.FirstName).Column("first_name");
        Map(x => x.LastName).Column("last_name");
        Map(x => x.NickName).Column("nickname");
        Map(x => x.AddressStreet1).Column("address_street_1");
        // ... more nullable properties
    }
} 
public class ContactInfoMap:ClassMap{
公共联系人信息地图(){
表(“联系人信息”);
懒散的负荷();
Id(x=>x.ContactInfoId).GeneratedBy.Identity()列(“联系人信息Id”);
Map(x=>x.FirstName).Column(“first_name”);
Map(x=>x.LastName).Column(“last_name”);
Map(x=>x.昵称).Column(“昵称”);
地图(x=>x.AddressStreet1)。栏(“address_street_1”);
//…更多可为空的属性
}
} 
和我的OrgInfo地图:

public class OrgInfoMap : ClassMap<OrgInfo> {
    public OrgInfoMap() {
        Table("org_info");
        LazyLoad();
        Id(x => x.OrgInfoId).GeneratedBy.Identity().Column("org_info_id");
        References(x => x.ContactInfo).Column("contact_info_id").Cascade.SaveUpdate().Not.LazyLoad();
        Map(x => x.OrgName).Column("org_name");
        // ... etc.
    }
}
公共类OrgInfoMap:ClassMap{
公共组织信息地图(){
表(“组织信息”);
懒散的负荷();
Id(x=>x.OrgInfoId).GeneratedBy.Identity()列(“org\u info\u Id”);
引用(x=>x.ContactInfo).Column(“contact_info_id”).Cascade.SaveUpdate().Not.LazyLoad();
Map(x=>x.OrgName).Column(“org_name”);
//……等等。
}
}

您可以使用反射来check@AlexKrups谢谢我在应用程序的其他地方做了一些代码设置,但我想知道nhibernate是否有任何内置功能来处理这种情况。@wooters我没有试过你的代码,但我大声想,你有没有试过在
引用()
部分设置
.Nullable()
?如果该对象没有设置,那么我认为NH将离开它,尽管不确定级联是否会验证它。@Kayes我没有。这是有道理的。我会试试的,谢谢。@kayes我试着添加了.Nullable(),但不幸的是,它没有起作用。我的最后一个选择是:删除级联,检查所有ContactInfo属性是否为空,然后分别插入ContactInfo。