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 Lookup_t9n.Culture_Id = Culture.Culture_Id AND Culture.Culture_Code = System.Threading.Thread.CurrentUICulture.CultureCode
.
Я знаю, что это не допустимый SQL, но выражает намерение, которое я надеюсь. Есть ли у кого-нибудь опыт такой вещи?
Я могу добавить слой отображения, где у меня могут быть классы, которые сопоставляются один с одним с таблицами базы данных, а затем написать простой c #, чтобы сопоставить эти классы с моимLookup
класс. Я скорее сделал это как временное решение. Мне было интересно, смогу ли я удалить этот слой отображения с помощью умного использования NH.