0
我们有一个遗留的ASP.Net项目,我们目前正在重构MVP模式。 对于后端,我们使用Fluent NHibernate和oracle数据库。 以前的开发人员直接在数据库中有一个奇怪的本地化实现。 我们很难用流畅的nhibernate绘制它。遗留应用程序的奇怪流畅的nhibernate映射
我们有以下表格,这些表格位于不同的数据库中。 (oracle模式)
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的异常,说明有多个与给定的ID的语言名称。所以看起来过滤器并不总是适用。我应该设置过滤器的全局参数还是为我实现的每个存储库设置参数? – 2013-02-11 22:02:30
必须在创建的每个ISession上设置过滤器,因为它仅适用于此。另外,如果languageId在每次应用程序运行时都是静态的,那么可以在映射级别上设置它,这会使它更容易。 – Firo 2013-02-12 07:06:53