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