我们过去曾经发展过一些网站,从公司演示网站到网上商店,经典的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模型。
答案 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上也有一个唯一的密钥。