我在我的數據庫中有狀態表以及包含這些狀態的語言特定版本的「本地化」表。主狀態表的要點是定義狀態ID值以及有關狀態的其他元數據。 「本地化」表是根據用戶的首選語言在用戶界面中顯示文本表示。下面是一個例子模式:LINQ to SQL中的數據庫數據的本地化/ I18n
create table [Language]
(
ID smallint primary key,
ISOName varchar(12)
)
create table EmployeeStatus
(
ID smallint primary key,
Code varchar(50)
)
create table EmployeeStatusLocalised
(
EmployeeStatusID smallint,
LanguageID smallint,
Description varchar(50),
constraint PK_EmployeeStatusLocalised primary key
(EmployeeStatusID, LanguageID),
constraint FK_EmployeeStatusLocalised_EmployeeStatus foreign key
(EmployeeStatusID) references EmployeeStatus (ID),
constraint FK_EmployeeStatusLocalised_Language foreign key
(LanguageID) references [Language] (ID)
)
create table Employee
(
ID int identity(1,1) primary key,
EmployeeName varchar(50) not null,
EmployeeStatusID smallint not null,
constraint FK_Employee_EmployeeStatus foreign key
(EmployeeStatusID) references EmployeeStatus (ID)
)
這是如何我通常訪問的數據:
select e.EmployeeName, esl.Description as EmployeeStatus
from Employee e
inner join EmployeeStatusLocalised esl on
e.EmployeeStatusID = esl.EmployeeStatusID and esl.LanguageID = 1
我不是真的很高興,我的LINQ to SQL以最有效的方式做事,但是。這裏有一個例子:
using (var context = new MyDbDataContext())
{
var item = (from record in context.Employees
select record).Take(1).SingleOrDefault();
Console.WriteLine("{0}: {1}", item.EmployeeName,
item.EmployeeStatus.EmployeeStatusLocaliseds.
Where(esl => esl.LanguageID == 1).Single().Description);
}