我有一个程序集 Foo.Bar ,它包含我的所有域逻辑和我的域对象(例如public class Project
,public 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 *程序集中找到映射文件?
答案 0 :(得分:3)
原来我要做的就是添加
<mapping assembly="Foo.Bar.Data"/>
到<session-factory>
元素中的hibnerate配置。