NHibernate一对多问题

NHibernate一对多问题,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个容器对象,它与 VesselDetail对象。当我将VesselDetail对象添加到Vessel对象并尝试保存Vessel对象时,NHibernate似乎在插入VesselDetail对象时没有添加外键 我哪里出了问题?我就是想不出来 错误消息: BDN.FindVessel.Tests.Integration.NhibernateRepositoryTests.SaveVesser\u应在向实体添加详细信息时向数据库添加详细信息: NHibernate.Exceptions.Gene

我有一个容器对象,它与 VesselDetail对象。当我将VesselDetail对象添加到Vessel对象并尝试保存Vessel对象时,NHibernate似乎在插入VesselDetail对象时没有添加外键

我哪里出了问题?我就是想不出来

错误消息: BDN.FindVessel.Tests.Integration.NhibernateRepositoryTests.SaveVesser\u应在向实体添加详细信息时向数据库添加详细信息: NHibernate.Exceptions.GenericDoException:无法插入:[BDN.FindVessel.Domain.VesselDetail][SQL:插入到BoatsDetails(安全装备、其他机械和装备、材料、尺寸、各种、TranslatorId、支出消费、主要机械、已创建、类别、容量、区域性、内饰、电子设备、甲板装备)值中(、、、、、、、、、、、、、、、、、、、、、、、、、、);选择范围_标识() ---->System.Data.SqlClient.SqlException:无法将值NULL插入表“FindVesselTest.dbo.BoatsDetails”的列“BoatId”;列不允许NULL。插入失败。 声明已终止

public class Vessel
{
        public virtual int BoatId { get; set; }
        public virtual IList<VesselDetail> Details { get; set; }
        //...
}

public class VesselDetail
{
        public virtual int VesselDetailId { get; set; }
        //some other properties
        //..
}

public class VesselMap: ClassMap<Vessel>
{
    public VesselMap()
    {
        WithTable("Boats");

        Id(x => x.BoatId, "Id");

        //..

        HasMany(x => x.Details)
            .WithKeyColumn("BoatId") //foreign key in the BoatsDetails table
            .Cascade.All();
    }
}

public class VesselDetailMap:ClassMap<VesselDetail>
{
  public VesselDetailMap()
  {
      WithTable("BoatsDetails");

      Id(x => x.VesselDetailId, "Id");

      //...
  }
}
公共级船舶
{
公共虚拟整数BoatId{get;set;}
公共虚拟IList详细信息{get;set;}
//...
}
公共级容器详图
{
公共虚拟int VesselDetailId{get;set;}
//其他一些属性
//..
}
公共类VesselMap:ClassMap
{
公共VesselMap()
{
有桌子的(“船”);
Id(x=>x.BoatId,“Id”);
//..
HasMany(x=>x.Details)
.WithKeyColumn(“BoatId”)//BoatsDetails表中的外键
.Cascade.All();
}
}
公共类VesselDetailMap:ClassMap
{
公共VesselDetailMap()
{
WithTable(“船艇详情”);
Id(x=>x.VesselDetailId,“Id”);
//...
}
}

我似乎遗漏了一些基本的NHibernate技能。读一读这篇文章,你似乎需要让子对象负责一对多关系

这为我解决了问题:

public class VesselMap: ClassMap<Vessel>
{
    public VesselMap()
    {
        //...

        HasMany(x => x.Details)
                .Inverse()
                .WithKeyColumn("BoatId");
    }
}

public class VesselDetailMap:ClassMap<VesselDetail>
{
  public VesselDetailMap()
  {
      //..

       References(x => x.Vessel, "BoatId")
                .Cascade
                .SaveUpdate();
  }
}
公共类VesselMap:ClassMap
{
公共VesselMap()
{
//...
HasMany(x=>x.Details)
.Inverse()
.WithKeyColumn(“BoatId”);
}
}
公共类VesselDetailMap:ClassMap
{
公共VesselDetailMap()
{
//..
参考(x=>x.船舶,“BoatId”)
大量
.SaveUpdate();
}
}