我使用的应用程序本地化。它的构建方式是检查实体(遍历结构)并翻译标记为“翻译”的每个属性。
翻译存储在单独的翻译表中。
这一切都很好,但是当我使用翻译更新实体时,我现在得到了我的'默认'值中的翻译值的问题。我不希望这样。
让我试着更好地解释一下。
数据库:
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();
}
正如您所看到的,足迹线具有多个引用categoryValue的值。 categoryvalue已本地化。
当我现在检索足迹线时,我们的框架将通过我们的翻译服务,并将自动翻译相应文化中的CategoryValue的名称和描述。如果它无法在CategoryValueLocal中找到翻译,它将使用CategoryValue中的默认值。
但是......如果我保存足迹线,它会将翻译后的值保存回CategoryValue(覆盖默认值)而不是忽略它。
CategoryValues不是值对象,可以更改,所以我不能让它们只读。 我试图将引用映射为Cascade.None,但这似乎没有做任何事情。
我希望有一种方法可以在映射中简单地标记这一点,这样我们就可以继续使用我们的TranslationService,而不必想出另一种方法来进行本地化。
答案 0 :(得分:2)
将属性标记为不可更新。
Map(x => x.Description).Not.Update();
你甚至可以定义一个约定
class TranslatedPropertiesConvention : AttributePropertyConvention<Translated>
{
public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
{
instance.Not.Update();
}
}