是否有任何.NET ORM支持开箱即用的本地化实体?

时间:2010-02-11 11:06:47

标签: c# .net entity-framework orm

我需要将本地化实体存储在数据库中(例如,产品,其名称与英语和丹麦语不同)。有几种众所周知的方法可以做到这一点,例如,有一些资源表包含本地化列的值。

但是,当我想用​​英语检索Product类的实例并期望Name属性的值为英语时,这似乎不容易适合ORM。

我不想重新发明轮子,我认为这是一个必须非常普遍的问题。 是否有任何ORM支持实体本地化开箱即用?

由于我在Microsoft堆栈上,并且ORM的明显选择是实体框架4. EF4中是否有任何功能支持此功能?

3 个答案:

答案 0 :(得分:9)

AFAIK EF4不提供此类内容。

Dmitri Maximov写了一系列关于DataObjects.Net本地化实现的帖子,即使您正在使用(或将要使用)任何其他框架,这些信息对您也有帮助:

答案 1 :(得分:1)

我有完全相同的问题(本地化内容,MS堆栈,ORM ......),目前我使用的是Resource / ResourceValue表。 我使用Linq-to-SQL和PLINQO templates,我稍微调整了一下,以便在我的实体中生成自动本地化的属性。

模板检测Resource表的外键并创建适当的列。

例如,如果我有一个带有int NameID FK列的产品表,它将在我的Product类上创建一个string Name属性,根据当前的Thread文化返回适当的值。

缺点是:

  • INSERTS / UPDATES的复杂性(必须使用3个表,但Linq2Sql使其不那么困难)
  • 在SQL Management中浏览表格很痛苦,因为Text列只是外键

我发现这个问题正在寻找一个“最佳实践”解决方案,但我还没有找到它。

答案 2 :(得分:0)

也许你需要进一步研究,我会使用NHibernate和拦截器来捕获实体的负载并根据应用程序的当前文化和存储本地化字符串的某种方式来实现实体的本地化。

一些资源:

http://elegantcode.com/2008/05/15/implementing-nhibernate-interceptors/

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#