我有一个程序集Foo.Bar,它包含我所有的域逻辑和我的域对象(例如public class Project
,public interface IProjectRepository
)。
我还有一个程序集Foo.Bar.Data作为我的 NHibernate 数据访问层,它包含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组件,一切正常。但我真的不希望任何数据访问或 NHibernate 实现细节到我的域程序集中。这往往是最佳做法,对吧?这种设置不是一个好方法吗?
如何让 NHibernate 在Foo.Bar.Data * 程序集中找到映射文件?