对不起,一个漫长的问题。但值得提供所有细节,请耐心等待,直到最后。FluentNHibernate - 将一个类映射到多个表
我正在对一个遗留数据库进行工作,但我没有太多的控制权。我想能够将一个类映射到多个数据库表。这里是我的表怎么看
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来移除该映射层。
我已经解决了两次你的解决方案,试图让我的头部绕过它。我认为我需要首先浏览您提供的所有链接并自行实施。 – Suhas
我同意。我的消化不像你想的那样简单。但它最终在努力...... –