使用NHibernate和外键映射SQL视图

时间:2012-02-22 16:38:59

标签: sql-server-2008 nhibernate nhibernate-mapping

在我的解决方案中,我有以下项目

MySystem.Core
MySystem.Core.Data

MySystem.MyAudit1.Core
MySystem.MyAudit1.Core.Data

MySystem.MyAudit2.Core
MySystem.MyAudit2.Core.Data

审计项目的数量可能会增加到20左右。

审计项目都需要一个"组织"参考数据表。我并没有在所有审计项目中复制相同的参考数据表20次,并试图让它们保持同步,我的计划是拥有一个" master"核心项目中的组织表。

这将包含所有组织的代码和说明。然后,在每个特定审计项目中都有一个OrganisationCode表,其中只包含与该审计相关的组织代码而不包含描述,并且在审计数据库中有一个视图,该视图从核心组织表中查找描述如下:

CREATE VIEW Organisation AS
SELECT d.OrganisationCodeId as 'OrganisationId', d.Code, a.[Description]
FROM MyAudit1.dbo.OrganisationCode d
INNER JOIN [Core].dbo.OrganisationCode a ON d.Code = a.Code

这意味着如果组织描述发生变化,可以在一个地方更新,并反映在所有审核中。

但是,由于您在SQL中的视图上没有外键,因此我在OrganisationCode表和审计数据库中的任何其他表之间创建了一个外键。

正如我所发现的,这当然会导致NHibernate尝试返回OrganisationCode 而非组织视图,并导致我的SessionFactory创建在Nhibernate正在寻找时失败对于OrganisationCode表中的OrganisationId。

是否有一种简单的方法可以让我在核心项目中进行单一描述查找,以便在子项目中使用参考数据

1 个答案:

答案 0 :(得分:0)

是的,审计表分布在不同的dbs上,但我已经找到了问题的路径。

我的SessionFactory创建失败的原因是Configuration正在传递审计数据程序集以进行映射,我的组织映射文件位于核心数据程序集中。

现在我通过在审计数据程序集中添加组织映射文件解决了这个问题,我的信任对象正在从组织视图中返回描述值。

感谢您的光临。