NHibernate不更新实体的所有属性

NHibernate不更新实体的所有属性,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在FluentNHibernate中遇到了一个奇怪的问题:当我保存实体时,其中一个(引用)属性没有更新。其他属性(字段和引用)都会更新,失败的属性也会正确映射(检索实体就像一个符咒) 对我正在做的事情的(稍微简化)描述: 在我的MVC操作方法中,绑定并设置了一个InputModel。它有一个用于TypeID的属性,我希望在这里设置实体的类型(我们将实体类型称为Thing) 创建一个新的对象,并复制输入模型的简单属性。对于两个复杂属性,其中类型属性不起作用,另一个属性不起作用,执行以下操作: 2

我在FluentNHibernate中遇到了一个奇怪的问题:当我保存实体时,其中一个(引用)属性没有更新。其他属性(字段和引用)都会更新,失败的属性也会正确映射(检索实体就像一个符咒)

对我正在做的事情的(稍微简化)描述:

  • 在我的MVC操作方法中,绑定并设置了一个
    InputModel
    。它有一个用于
    TypeID
    的属性,我希望在这里设置实体的
    类型
    (我们将实体类型称为
    Thing
  • 创建一个新的
    对象
    ,并复制
    输入模型
    的简单属性。对于两个复杂属性,其中
    类型
    属性不起作用,另一个属性不起作用,执行以下操作:
    2.1. 根据提供的类型id,从存储库中获取正确的
    ThingType

    2.2. 在新的
    thing
    对象上设置类型(使用
    thing.type=theType
  • 我要更新的
    东西
    是根据输入模型上的id(与
    TypeID
    不同的id)从存储库中获取的
  • 所有属性,复杂的和其他的,都从新事物(由我创建)复制到原始事物(从数据库获取)
  • 使用
    session.Save()保存原始的
    内容
    如上所述,只有一个属性不起作用——其他属性(据我所知)遵循完全相同的模式,起作用。我还调试并验证了原始的
    东西
    在传递到
    session.Save()时是否具有正确的、更新的
    类型

    我不知道从哪里开始解决这个问题

    更新:类是普通POCO:

    public class Thing 
    {
        public int ID { get; set; }
        public string SomeSimpleProp { get; set; }
        public ThingType Type { get; set; }
        public OtherEntity OtherReference { get; set; }
    }
    public class ThingType
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
    
    我的精确映射(类型和属性的名称除外)如下所示:

    // In ThingMap : ClassMap<Thing> constructor:
    Id(t => t.ID).Column("ThingID");
    Map(t => t.SomeSimpleProp);
    References(t => t.Type).Column("ThingTypeID");
    References(t => t.OtherReference).Column("OtherReferenceID");
    
    // In ThingTypeMap : ClassMap<ThingType> constructor:
    Id(t => t.ID).Column("ThingTypeID");
    Map(t => t.Name);
    
    //在ThingMap:ClassMap构造函数中:
    Id(t=>t.Id).列(“ThingID”);
    Map(t=>t.SomeSimpleProp);
    引用(t=>t.Type).Column(“ThingTypeID”);
    引用(t=>t.OtherReference).Column(“OtherReferenceID”);
    //在ThingTypeMap:ClassMap构造函数中:
    Id(t=>t.Id).Column(“ThingTypeID”);
    Map(t=>t.Name);
    

    正如我所说,
    OtherReference
    已正确更新,而
    Type
    未正确更新。它们映射相同,因此我不认为这可能是映射错误。

    为了更新引用,您应该指定

    为了更新引用,您应该指定

    为了澄清:更新的不是实际的
    类型
    ,而是
    引用的类型。这是否仍然适用?因为它正在处理其他属性,而没有这个…@Tomas Lycken可能正在提供地图和类,这个问题可能会有所帮助。澄清一下:更新的不是实际的
    类型
    ,而是
    对象
    引用的类型。这是否仍然适用?因为它正在处理其他属性,而没有这个…@Tomas Lycken可能正在提供映射和类int,这个问题可能会有所帮助。如果实体来自数据库,则不需要调用session.Save。提供一些(相关的)真实代码和/或映射(请简化为重要的部分)。您是如何设置映射的?@Stefan:进一步调查后,我发现这是一个事务问题,源于我试图调用session.Save()。如果将其添加为答案,我会将其标记为accepted=)如果实体来自数据库,则不需要调用session.Save。提供一些(相关的)真实代码和/或映射(请简化为重要的部分)。您是如何设置映射的?@Stefan:进一步调查后,我发现这是一个事务问题,源于我试图调用session.Save()。如果您将其添加为答案,我会将其标记为已接受=)