【问题标题】:Localized tables and Entity Framework本地化表和实体框架
【发布时间】:2009-11-03 15:27:48
【问题描述】:

我有一个场景,我需要本地化数据库中对象的值。

假设您有一个可以创建动物的应用程序,如果用户是英语用户,则动物的“名称”属性的值将在 UI 中输入为“Cat”,而在 UI 中输入为“Chat”法语。

动物文化表将包含 2 条记录,指向父表中的同一动物。

当读回值时,如果用户文化中不存在“名称”的值,则将使用默认值(对象最初创建时使用的值)。 下图展示了数据在 SQL 中是如何存储的:

我正在尝试使用实体框架将此架构映射到对象模型,但我对解决问题的最佳方法有点困惑。

EF 适合这个吗?我应该使用 EF4 吗?

.NET RIA 服务将使用此 EF 模型。

谢谢,

皮埃尔-伊夫·特罗尔

【问题讨论】:

  • 您需要在应用程序中同时出现多种语言,还是一次只显示一种语言?
  • 你的问题和你放在它末尾的“AD”之间的关系是什么?不管怎样,看看这个问题stackoverflow.com/questions/2272026

标签: c# entity-framework entity culture


【解决方案1】:

我在类似情况下所做的是创建了一个视图,即 LocalizedAnimals,它是该 2 个表结构的平面表示,并为该视图创建了一个 EF 模型。所以当我需要显示法国动物数据时,我会过滤那些 LocalizedAnimals 并得到很好的简单对象列表。

类似这样的:

var localizedAnimals = myContext.LocalizedAnimals.Where(
                           p => p.CultureName == Thread.CurrentThread.CurrentUICulture.Name
                       );

【讨论】:

    【解决方案2】:

    我不确定您是否想在数据库中执行此操作。我认为使用定义特定文化名称的配置文件或资源会更明智。

    您还可以在 internationalization and localization 上查看 Microsoft 的文档。

    【讨论】:

    • 资源更专注于存储静态值而不是动态值,就像在这种情况下一样。 Animal 是一个实体的定义,您不知道有多少值(实例)。在这种情况下,更好的方法(不是唯一的)是 Pyttroll 建议的
    • 很久以前,但您“必须”为用户/管理员生成的内容使用数据库。在生成方面,资源文件仅用于预生产,因为它们需要编译。您可以尝试动态生成它们,但随后您会遇到锁定问题以及 DBMS 已经解决的大量问题。
    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多