NHibernate不更新实体的所有属性

时间:2011-08-08 09:59:34

标签: nhibernate fluent-nhibernate

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

我正在做的(略微简化)描述:

  1. 进入我的MVC操作方法,绑定并设置InputModel。它有TypeID的属性,我希望在其中设置我的实体的Type(让我们调用实体类型Thing)。
  2. 创建一个新的Thing对象,并复制InputModel的简单属性。对于一些复杂的属性,其中Type属性不起作用,另一个属性是,完成以下操作:
    2.1。根据提供的类型ID,从存储库中获取正确的ThingType 2.2。在新thing.Type = theType对象上设置类型(使用Thing)。
  3. 我想要更新的Thing是根据输入模型上的ID(与TypeID不同的ID)从存储库中提取的。
  4. 所有属性,复杂的和其他属性都会从新东西(由我创建)复制到原始属性(从db中获取)。
  5. 使用Thing保存原始session.Save();
  6. 如上所述,它只是一个不起作用的属性 - 其他属性,跟随(据我所知)完全相同的模式,工作。我还调试并验证了原始Thing在传递给Type时具有正确的,已更新的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);
    

    正如我所说,OtherReference未正确更新Type。它们的映射方式相同,所以我不知道这可能是一个映射错误。

1 个答案:

答案 0 :(得分:1)

您应指定<many-to-one .... cascade="save-update"/>以更新参考。