在不同的程序集中定义NHibernate映射而不是域对象

时间:2012-06-18 15:53:37

标签: nhibernate-mapping

我有一个程序集 Foo.Bar ,它包含我的所有域逻辑和我的域对象(例如public class Projectpublic interface IProjectRepository)。

我还有一个程序集 Foo.Bar.Data ,它充当我的NHinbernate数据访问层,它拥有IProjectRepository基于NHibernate的实现。它引用 Foo.Bar 并包含映射文件,例如 Project.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Foo.Bar"
                   namespace="Foo.Bar.Domain" default-lazy="false">
  <class name="Project">
    <id name="Id" column="ID" />
    <property name="Customer" column="CUSTOMER" />
  </class>
</hibernate-mapping>

不幸的是,通过此设置,我得到以下异常:

NHibernate.MappingException:没有持久性:Foo.Bar.Domain.Project

NHibernate日志说:

WARN NHibernate.Cfg.Configuration(null) - 在程序集中找不到映射文件:Foo.Bar,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null

如果我将映射文件添加到 Foo.Bar assmbly,一切正常。但我真的不希望任何数据访问或NHinbernate实现细节到我的域程序集中。这往往是最好的做法,对吧?这种设置不是一个好方法吗?

如何让NHibernate在 Foo.Bar.Data *程序集中找到映射文件?

1 个答案:

答案 0 :(得分:3)

原来我要做的就是添加

<mapping assembly="Foo.Bar.Data"/> 

<session-factory>元素中的hibnerate配置。