【问题标题】:Modeling Localized Data in Entity Framework Code First首先在实体框架代码中建模本地化数据
【发布时间】:2012-09-15 10:27:07
【问题描述】:

我正在尝试创建一个支持本地化的域模型。我已经查看了一些之前提出的 SO 问题,但我不太喜欢提出的解决方案。例如,在this question 中,我认为为每个应该支持本地化数据的实体创建一个额外的实体是一种矫枉过正的做法。我宁愿将我所有实体的本地化数据放在一个实体中,该实体的唯一目的是保存本地化数据。

我提出的解决方案如下:

  1. 创建一个LocalizedEntity 类,所有应该支持本地化的实体都将从该类继承。

  2. 创建一个LocalizedData 实体,该实体基本上将按文化保存实际的本地化值。

更新:

public class LocalizedEntity
{
    public String Code { get; set; }
}

public enum ResourceType
{
    CityName,
    CityDescription,
    StreetName,
    AreaName
    //others...
}

public class LocalizedData
{
    public Int32 Id { get; set; }
    public String Code { get; set; }
    public ResourceType Type { get; set; }
    public Int32 CultureId { get; set; }
    public String Value { get; set; }
}

public class City : LocalizedEntity
{
    public Int32 Id { get; set; }
    public virtual ICollection<Area> Areas { get; set; }
    //others
}

据此,业务层将获取本地化实体,然后通过CodeResourceTypeLocalizedData实体中获取其本地化值。当然,为了避免多次往返数据库,一些缓存可能是合适的。

你的想法?

【问题讨论】:

  • 我不确定什么是本地化的。请展示一些本地化实体,以及您希望它如何使用两种语言。
  • 已更新。让我知道是否更清楚。
  • 对不起。对我帮助不大。为什么不只为 N 种语言保存 N 个实体副本?然后,您可以通过一个查询以一种语言或所有语言查询实体。

标签: c# .net entity-framework localization


【解决方案1】:

您要建模的是 EAV(实体属性值)存储。很快您的“资源类型”枚举将溢出到无法管理的状态。雪上加霜,这在数据库结构方面是非常无效的。

如果您希望本地化在 db 使用代码可读性方面仍然可维护,您应该本地化实体,而不是属性,这意味着数据库中的每一行都应该包含该实体的实体 ID、语言 ID 和该语言的数据。

【讨论】:

  • 嗯...所以你是说我最好为每个本地化实体创建另一个表?
  • @Kassem 是的。这会给你一个规范化的数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多