我有四个表:如何绘制词典<字符串,字符串>跨越几个表
CREATE TABLE [Languages]
(
[Id] INTEGER IDENTITY(1,1) NOT NULL,
[Code] NVARCHAR(10) NOT NULL,
PRIMARY KEY ([Id]),
UNIQUE INDEX ([Code])
);
CREATE TABLE [Words]
(
[Id] INTEGER IDENTITY(1,1) NOT NULL,
PRIMARY KEY ([Id])
);
CREATE TABLE [WordTranslations]
(
[Id] INTEGER IDENTITY(1,1) NOT NULL,
[Value] NVARCHAR(100) NOT NULL,
[Word] INTEGER NOT NULL,
[Language] INTEGER NOT NULL,
PRIMARY KEY ([Id]),
FOREIGN KEY ([Word]) REFERENCES [Words] ([Id]),
FOREIGN KEY ([Language]) REFERENCES [Languages] ([Id])
);
CREATE TABLE [Categories]
(
[Id] INTEGER IDENTITY(1,1) NOT NULL,
[Word] INTEGER NOT NULL,
PRIMARY KEY ([Id]),
FOREIGN KEY ([Word]) REFERENCES [Words] ([Id])
);
所以,你得到通过Word中的类别的名称 - > WordTranslation - >语言的关系。
像这样:
SELECT TOP 1 wt.Value
FROM [Categories] AS c
LEFT JOIN [WordTranslations] AS wt ON c.Word = wt.Word
WHERE wt.Language = (
SELECT TOP 1 l.Id
FROM [Languages]
WHERE l.[Code] = N'en-US'
)
AND c.Id = 1;
,将返回类别的EN-美国翻译使用id = 1
我的问题是如何使用下面的类来映射这个:
public class Category
{
public virtual int Id { get; set; }
public virtual IDictionary<string, string> Translations { get; set; }
}
获得与上面的SQL查询相同的结果是:
Category category = session.Get<Category>(1);
string name = category.Translations["en-US"];
而“名称”现在将包含en-US中的类别名称。
类别映射到类别表。
你会如何做到这一点,甚至有可能吗?
严正?我真的不想这样做,我只是希望NH能够找出这些查询,并且马上使用字典。 – 2010-04-07 11:02:45