NHibernate不在一对多中插入子实体

NHibernate不在一对多中插入子实体,nhibernate,one-to-many,inverse,Nhibernate,One To Many,Inverse,我有Customer和Profile类,其中一个客户可以有多个Profile 我正在使用以下NHibernate重写类: public void Override(AutoMapping<Customer> mapping) { mapping.Table("[Customer]"); mapping.Id(x => x.Id, "Id").GeneratedBy.Identity(); mapping.HasMany

我有
Customer
Profile
类,其中一个客户可以有多个Profile

我正在使用以下NHibernate重写类:

 public void Override(AutoMapping<Customer> mapping)
    {
        mapping.Table("[Customer]");
        mapping.Id(x => x.Id, "Id").GeneratedBy.Identity();

        mapping.HasMany(x => x.Profiles).Cascade.All().Inverse();

        mapping.Map(x => x.FirstName, "FirstName");
        mapping.Map(x => x.LastName, "LastName");
        mapping.Map(x => x.Email, "Email");            
    }

public void Override(AutoMapping<Profile> mapping)
    {
        mapping.Table("[Profile]");
        mapping.Id(x => x.Id, "Id").GeneratedBy.Identity();

        mapping.References(x => x.Customer, "Customer_Id").Cascade.None();

        mapping.Map(x => x.FacebookProfileLink, "FacebookProfileLink");
        mapping.Map(x => x.ContactPhone, "ContactPhone");          
    }
public void覆盖(自动映射)
{
映射表(“[客户]”);
mapping.Id(x=>x.Id,“Id”).GeneratedBy.Identity();
mapping.HasMany(x=>x.Profiles).Cascade.All().Inverse();
Map(x=>x.FirstName,“FirstName”);
Map(x=>x.LastName,“LastName”);
Map.Map(x=>x.Email,“Email”);
}
公共无效替代(自动映射)
{
映射表(“[Profile]”);
mapping.Id(x=>x.Id,“Id”).GeneratedBy.Identity();
mapping.References(x=>x.Customer,“Customer_Id”).Cascade.None();
Map(x=>x.FacebookProfileLink,“FacebookProfileLink”);
Map(x=>x.ContactPhone,“ContactPhone”);
}
插入
Profile
对象时出现以下错误:

无法将值NULL插入表“dbo.Profile”的“Customer_Id”列中;列不允许空值。INSERT失败。\r\n语句已终止

我的目的是在
Profile
之前插入
Customer
对象,该对象需要引用
Customer

对象这就是为什么我要使用反向属性。不幸的是,它不起作用。有什么帮助吗?谢谢。

作为一个好的ORM,NHibernate做的一件事就是保存关系中的所有内容,这样就不必单独保存。我认为您的问题可能在于,当您说“在需要引用客户的概要文件之前插入客户对象”时,您正在做什么

实际情况是,您应该创建客户,并将所需的配置文件与之关联,然后只保存客户。NHibernate将以正确的顺序保存所有实体,以确保关系得到保留。尝试这样做,首先创建或检索客户实体,然后添加/删除配置文件,然后保存客户。配置文件将被保存,因为您在映射中指定了级联选项


希望有帮助

我找到了适合我的解决方案

我正在保存客户实体而不参考其配置文件。之后,我将保存配置文件实体

对我来说,这比我以前想要实现的解决方案更有效,因为我可以检查客户插入是否成功,然后决定下一步要做什么(同时保存配置文件或执行一些验证错误)


谢谢你们的回答。

谢谢你们的回复。只是尝试了一下(用添加的配置文件保存客户),不幸的是错误仍然是一样的:(很高兴有人发布了您问题的解决方案。请标记您选择的答案。