很抱歉问了一个冗长的问题。但值得提供所有细节,所以请耐心等待我到最后。
我正在处理一个我没有太多控制权的遗留数据库。我希望能够将一个类映射到多个数据库表。这是我的桌子的样子
Lookup
+--------+--------------+------------+
| Column | DataType | Attributes |
+--------+--------------+------------+
| Id | INT | PK |
| Code | NVARCHAR(50) | |
+--------+--------------+------------+
Culture
+--------------+--------------+------------+
| Column | DataType | Attributes |
+--------------+--------------+------------+
| Id | INT | PK |
| Culture_Code | NVARCHAR(10) | |
+--------------+--------------+------------+
Lookup_t9n
+----------------+---------------+---------------------+
| Column | DataType | Attributes |
+----------------+---------------+---------------------+
| Id | INT | PK |
| Culture_Id | INT | FK to Culture table |
| Localised_Text | NVARCHAR(MAX) | |
+----------------+---------------+---------------------+
如您所见,我有一个查找表,其中存储了所有查找。查找的显示文本已本地化并存储在单独的表中。此表有一个外键到文化表来指示本地化文本存在的文化。
我的课看起来像这样
public class Lookup {
public virtual int Id {get; set;}
public virtual string Code {get; set;}
public virtual string DisplayText {get; set;}
}
我的 FNH 映射类看起来像这样
public class LookupMappings : ClassMap<Lookup> {
public LookupMappings()
{
Table("Lookup");
Id(x => x.Id).Column("Id");
Map(x => x.Code).Column("Code");
Join("Lookup_t9n", join => {
join.Map(x => x.DisplayText).Column("Localised_Text"); //Note this place, my problem is here
})
}
}
在上面的映射中,Join
部分我想提供一些 where 子句,例如WHERE Lookup_t9n.Culture_Id = Culture.Culture_Id AND Culture.Culture_Code = System.Threading.Thread.CurrentUICulture.CultureCode
.
我知道这不是一个有效的 SQL,但传达了我希望的意图。有没有人有做这种事情的经验。
我可以添加一个映射层,在其中我可以拥有与数据库表一对一映射的类,然后编写纯 c# 将这些类映射回我的Lookup
类。我宁愿将其作为临时解决方案。我想知道是否可以通过一些智能 NH 使用来删除该映射层。