У нас есть проект ASP.Net, который мы в настоящее время реорганизуем с шаблоном MVP. Для бэкэнд мы используем Fluent NHibernate с базой данных оракула. Предыдущие разработчики имели странную реализацию локализации непосредственно в базе данных. И у нас есть трудное время, чтобы сопоставить его с белым nhibernate.Странное свободное отображение nhibernate для устаревшего приложения
У нас есть следующие таблицы, которые находятся в разных базах данных. (схемы оракулов)
db1.Activity
(
ID, (pk)
ID_LANGUAGENAME, (fk)
INPUT_DATE,
and so on...
)
db2.LanguageName
(
ID, (pk)
ID_LANGUAGE, (pk)
NAME
)
db2.Language
(
ID,
LANGUAGE,
LANGUAGE_SHORT
)
ID_LANGUAGE хранится в переменной сеанса ASP.Net. Я хочу отобразить объекты, чтобы я мог сделать что-то подобное, как этот запрос.
SELECT LN.NAME, A.INPUT_DATE FROM db1.Activity A
INNER JOIN db2.LanguageName LN ON A.ID_LANGUAGENAME = LN.ID
INNER JOIN db2.Language L ON LN.ID_LANGUAGE = L.ID
WHERE A.ID = :ACTIVITYID AND L.ID = :LANGUAGEID_FROM_SESSION_VARIABLE
Поэтому в основном я wan't сущность деятельности, которая выглядит следующим образом:
public class Activity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime InputDate { get; set; }
}
Если название Активность прибудет пользователь автоматически преобразуются в соответствующей LanguageName.Name поле в базе данных. Возможно ли это с помощью NHibernate?
Этот вид работ, но когда я карту LANGUAGENAME к деятельности в качестве ссылочного соотношения (1 к 1) я иногда получаю исключение NHibernate, указывающее, что существует несколько языков с данным идентификатором. Поэтому кажется, что фильтр не всегда применяется. Должен ли я устанавливать параметры фильтра глобально или для каждого репозитория, который я реализую? –
фильтр должен быть установлен на каждом ISession, созданном, потому что он применяется только к этому. Кроме того, если языкId был бы статичным для запуска приложения, его можно было бы установить на уровне сопоставления, что сделало бы его еще проще. – Firo