Ayendes 帖子是如何设计它的一个很好的开始。
它将完美地适用于企业解决方案。单独表中的名称与任何其他值列表一样。特殊的是,它在映射中被过滤。
编辑 - 选项:
使用另一个实体编辑数据
有一个 Product 实体,其中包含所有名称作为列表。LocalizedProduct 只有当前语言名称。
获取过滤后的实体
- 通过按照博客中的描述映射它,使用过滤器。
- 通过使用结果转换器 (Transformers.AliasToBean) 或使用“select new LocalizedProduct(id, name, Prize ...)”来选择它。在这种情况下不会映射 LocalizedProduct。应该是二级缓存友好的。
如果您对 Product 有很多引用,那么拥有两个类可能不太好,因为您不知道引用应该包含哪个类。
使用相同的实体进行编辑和显示
class Product
{
string LocalizedName
{
get { return AllProductNames[Thread.CurrentThread.CurrentCulture.LCID]; }
}
IDictionary<int, string> AllProductNames { get; private set; }
}
本地化产品名称 (get)和所有产品名称都有属性。
- 根本不过滤它们:-) 有一点网络开销。如果你只有 3 到 5 种语言,那还不错。如果您有 20 个或更多,最好过滤名称。
- 使用博客中描述的(可选)过滤器,但在产品名称上
- 使用(可选)ResultTransformer (CriteriaUtil.AliasToEntityMap) 过滤名称。
老实说,我会选择一个在映射文件中不需要过滤器的选项。过滤器属于更易于维护的查询。