FluentNHibernate - Mapeando uma classe para várias tabelas
Desculpe por uma longa pergunta. Mas vale a pena dar todos os detalhes, por favor, aguarde comigo até o fim.
Eu estou trabalhando contra um banco de dados legado sobre o qual eu não tenho muito controle. Eu quero ser capaz de mapear uma classe para várias tabelas de banco de dados. Aqui está como minhas tabelas parecem
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) | |
+----------------+---------------+---------------------+
Como você pode ver, eu tenho uma tabela de pesquisa onde todas as pesquisas são armazenadas. O texto de exibição de uma pesquisa é localizado e armazenado em uma tabela separada. Esta tabela tem uma chave estrangeira para a tabela de cultura para indicar a cultura para a qual o texto localizado existe.
Minha aula parece com isso
public class Lookup {
public virtual int Id {get; set;}
public virtual string Code {get; set;}
public virtual string DisplayText {get; set;}
}
E minha classe de mapeamento FNH se parece com isso
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
})
}
}
No mapeamento acima, emJoin
parte eu quero fornecer alguma cláusula where comoWHERE Lookup_t9n.Culture_Id = Culture.Culture_Id AND Culture.Culture_Code = System.Threading.Thread.CurrentUICulture.CultureCode
.
Eu sei que isso não é um SQL válido, mas transmite a intenção que espero. Alguém tem alguma experiência de fazer uma coisa dessas?
Eu posso adicionar uma camada de mapeamento onde eu posso ter classes que mapeiam um-para-um com tabelas de banco de dados e, em seguida, escrever c # simples para mapear essas classes de volta ao meuLookup
classe. Eu tenho feito isso como uma solução provisória. Eu queria saber se eu posso remover essa camada de mapeamento com algum uso inteligente de NH.