我遇到了FluentNHibernate的奇怪问题:当我保存我的实体时,其中一个(引用)属性没有更新。更新其他属性(字段和引用),并正确映射失败属性(检索实体就像魅力一样)。
我正在做的(略微简化)描述:
InputModel
。它有TypeID
的属性,我希望在其中设置我的实体的Type
(让我们调用实体类型Thing
)。Thing
对象,并复制InputModel
的简单属性。对于一些复杂的属性,其中Type
属性不起作用,另一个属性是,完成以下操作:ThingType
2.2。在新thing.Type = theType
对象上设置类型(使用Thing
)。Thing
是根据输入模型上的ID(与TypeID
不同的ID)从存储库中提取的。Thing
保存原始session.Save();
。 如上所述,它只是一个不起作用的属性 - 其他属性,跟随(据我所知)完全相同的模式,工作。我还调试并验证了原始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
。它们的映射方式相同,所以我不知道这可能是一个映射错误。
答案 0 :(得分:1)
您应指定<many-to-one .... cascade="save-update"/>
以更新参考。