本地化表和实体框架

Posted

技术标签:

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

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

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

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

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

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

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

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

谢谢,

皮埃尔-伊夫·特罗尔

【问题讨论】:

您需要在应用程序中同时出现多种语言,还是一次只显示一种语言? 你的问题和你放在它末尾的“AD”之间的关系是什么?不管怎样,看看这个问题***.com/questions/2272026 【参考方案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 已经解决的大量问题。

以上是关于本地化表和实体框架的主要内容,如果未能解决你的问题,请参考以下文章

使用带有本地数据库文件 (Sdf) 的实体框架生成 C# 整数主键

使用实体框架6将数据从数据库存储到本地

ASP.NET 和实体框架:PDF 报告不在本地 iis 服务器上呈现

java spring web应用中实体本地化的最佳实践

实体框架迁移重命名表和列

实体框架更新/插入多个实体