本地化表和实体框架
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# 整数主键