NHibernate 一对多问题

标签 nhibernate fluent-nhibernate

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

我哪里错了?我就是想不通。

错误信息: BDN.FindVessel.Tests.Integration.NhibernateRepositoryTests.SaveVessel_ShouldAddDetailsToDb_WhenAddedToEntity: NHibernate.Exceptions.GenericADOException:无法插入:[BDN.FindVessel.Domain.VesselDetail][SQL:INSERT INTO BoatsDetails(SaftyGear、OtherMachineryAndGear、 Material 、尺寸、各种、TranslatorId、SpeenAndConsumption、MainMachinery、Created、Class、Capasities、Culture,内饰、电子、DeckGear) 值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);选择 SCOPE_IDENTITY()] ----> System.Data.SqlClient.SqlException:无法将值 NULL 插入到列“BoatId”、表“FindVesselTest.dbo.BoatsDetails”中;列不允许空值。插入失败。 声明已终止。

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");

      //...
  }
}

最佳答案

似乎我缺少一些基本的 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();
  }
}

关于NHibernate 一对多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555870/

相关文章:

NHibernate - 在插入时生成,防止值更新

c# - ISession 在 Azure 辅助角色中应该具有什么生活方式?

c# - 如何向 NHibernate queryover 添加按方向动态排序

nhibernate - 在Fluent NHibernate中检查是否存在延迟加载的 child 而不获取/加载

c# - 如何在 Fluent NHibernate 中将一对一关系映射为复合键的一部分

nhibernate - 如何在普通 SQL 查询中为连接表定义表别名?

jquery - LINQ 和反射

hibernate - 在没有 .hbm 或 xml 文件的情况下在 NHibernate Fluent Mapping 中定义命名查询

c# - NHibernate 级联 ="all-delete-orphan"正在删除非孤立行

c# - NHibernate - 如何从多对多关系中删除一个项目?