mvc dot.net模型的多语言数据库模式

时间:2015-03-10 20:30:31

标签: asp.net-mvc database multilingual

我们过去曾经发展过一些网站,从公司演示网站到网上商店,经典的asp。所有这些都是在多语言环境(el,en)中开发的。从数据库视图中我们选择了以下模式。例如,对于products表,我们有两个相关的表,一个没有语言依赖的字段,另一个表用于具有一对多关系的语言依赖字段。

CREATE TABLE ref_language (
  Code Char(2)NOT NULL,
  Name Varchar(20) NOT NULL,
  PRIMARY KEY (Code)
);
 
CREATE TABLE app_product (
 Id Int IDENTITY NOT NULL,
 PRIMARY KEY (Id)
);
 
CREATE TABLE app_product_translation (
 ProductId Int NOT NULL,
 LanguageCode Char(2) NOT NULL,
 Description Text NOT NULL,
 FOREIGN KEY (ProductId) REFERENCES app_product(Id),
 FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);

要重新创建产品模型,我们使用存储过程来连接所请求语言的两个表。 现在我们想进入dot.net mvc模型。我们想知道是否有更好的方法,最适合mvc模型。

1 个答案:

答案 0 :(得分:0)

这取决于您的要求,但您可以创建一个类来加载和缓存内存中的标题,使用EF加载它们。要么使用静态类,要么使用ASP.NET缓存。

如果您在客户端执行动态操作,则在必要时通过WebAPI控制器的MVC公开字符串。

为了使这更容易,我会将您的翻译与架构中的产品分开。使您的翻译具有普遍性。

只需要一个名为app_translation的表,其中包含Id,LanguageCode和Translation字段。然后在任何需要翻译标题的表上引用Id。

要强制实施参照完整性,您还可以拥有一个包含单个列和唯一约束的app_translation_identifier表。然后FK从app_translation.Id到app_tranlsation_identifier.Id。并且在Id和LanguageCode的app_translation上也有一个唯一的密钥。