Fluent nhibernate NHibernate fluent阻止更新儿童

Fluent nhibernate NHibernate fluent阻止更新儿童,fluent-nhibernate,mapping,cascade,Fluent Nhibernate,Mapping,Cascade,我的应用程序使用本地化。它的构建方式是,它检查一个实体(沿结构向下遍历)并转换标记为“translate”的每个属性 翻译存储在单独的翻译表中 这一切都很好,但它给我留下了一个问题,即当我使用翻译更新实体时,我现在在“默认”值中获取翻译后的值。我不想那样 让我试着更好地解释 数据库: footprintlinevLue的映射: public class FootprintLineValueMap : ClassMap<FootprintLineValue> { public Foo

我的应用程序使用本地化。它的构建方式是,它检查一个实体(沿结构向下遍历)并转换标记为“translate”的每个属性

翻译存储在单独的翻译表中

这一切都很好,但它给我留下了一个问题,即当我使用翻译更新实体时,我现在在“默认”值中获取翻译后的值。我不想那样

让我试着更好地解释

数据库:

footprintlinevLue的映射:

public class FootprintLineValueMap : ClassMap<FootprintLineValue> {
 public FootprintLineValueMap() {
    Table("FootprintLineValue");

    Id(x => x.Id).GeneratedBy.Identity().Column("Id");
    References(x => x.FootprintLine).Column("FootprintLineId");
    References(x => x.CategoryValue).Column("CategoryValueId").Cascade.None();

  }
公共类FootprintLineValueMap:ClassMap{
公共足迹LineValueMap(){
表(“FootprintLineValue”);
Id(x=>x.Id).GeneratedBy.Identity()列(“Id”);
参考(x=>x.FootprintLine).Column(“FootprintLineId”);
引用(x=>x.CategoryValue).Column(“CategoryValueId”).Cascade.None();
}
正如您所看到的,封装外形线有多个引用categoryValue的值。categoryValue是本地化的

当我现在检索footprintlines时,我们的框架将通过我们的translationservice,并将在相应的区域性中自动翻译CategoryValue的名称和描述。如果在CategoryValue Local中找不到翻译,它将使用默认的in CategoryValue

但是…如果保存封装外形线,它会将转换后的值保存回CategoryValue(覆盖默认值),而不是忽略它

CategoryValue不是值对象,可以更改,因此我无法将其设置为只读。 我试图将引用映射为Cascade。没有,但似乎没有任何作用


我希望有一种方法可以简单地在映射中标记这一点,这样我们就可以继续使用我们的TranslationService,而不必找出另一种方法来处理本地化。

将属性标记为不可更新

Map(x => x.Description).Not.Update();
你甚至可以定义一个这样做的约定

class TranslatedPropertiesConvention : AttributePropertyConvention<Translated>
{
    public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
    {
        instance.Not.Update();
    }
}
类TranslatedPropertiesConvention:AttributePropertyConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance实例)
{
instance.Not.Update();
}
}