2009-11-03 75 views
10

我有一个场景,我需要在我的数据库中对象的本地化值。本地化表和实体框架

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

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

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

alt text

我试图映射此模式来使用实体框架的对象模型,我有点困惑,什么是最好的解决问题的方法。

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

这个EF模型将被.NET RIA Services使用。

感谢,

皮埃尔 - 伊夫·Troel

+2

你需要有多种语言在同一时间出现在应用程序,否则会在同一时间内只有一个单一的语言? – 2009-11-03 16:26:18

+0

你的问题与你在最后的“AD”之间的关系是什么?无论如何看看这个问题在这里http://stackoverflow.com/questions/2272026 – 2011-01-27 10:30:44

回答

-1

我不知道你想这样做在数据库中。我认为使用定义文化特定名称的配置文件或资源会更明智。

您也可以查看微软的文档internationalization and localization

+0

同意。这是做IOT的正确方法。 – 2009-11-03 17:22:40

+7

资源更专注于存储静态值而非动态值,就像在这种情况下一样。动物是一个实体的定义,你不知道有多少值(实例)会有。在这种情况下,较好的方法(不是唯一的方法)是由Pyttroll – Lester 2010-04-22 20:27:57

+1

提出的建议,但是您必须“为”用户/管理员生成的内容使用数据库。在生成方面,资源文件仅用于预生产,因为它们需要编译。你可以尝试动态生成它们,但是随后你会遇到锁定问题以及DBMS已经解决的大量问题。 – rism 2014-06-07 12:05:42

4

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

事情是这样的:

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