2010-04-12 72 views
3

有没有办法将域对象和映射文件分离成两个单独的项目?我想创建一个名为MyCompany.MyProduct.Core的项目,其中包含我的域模型,另一个名为MyCompany.MYProduct.Data.Oracle的项目包含我的Oracle数据映射。但是,当我尝试进行单元测试时,我收到以下错误消息:nHibernate域模型和映射文件在单独的项目

未找到命名查询'GetClients'。

这里是我的映射文件:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="MyCompany.MyProduct.Core" 
        namespace="MyCompany.MyProduct.Core"     
        > 
    <class name="MyCompany.MyProduct.Core.Client" table="MY_CLIENT" lazy="false"> 
    <id name="ClientId" column="ClientId"></id> 
    <property name="ClientName" column="ClientName" /> 
    <loader query-ref="GetClients"/> 
    </class> 
    <sql-query name="GetClients" callable="true"> 
    <return class="Client" /> 
    call procedure MyPackage.GetClients(:int_SummitGroupId) 
    </sql-query> 
</hibernate-mapping> 

这里是我的单元测试:

 try 
     { 
      var cfg = new Configuration(); 
      cfg.Configure(); 
      cfg.AddAssembly(typeof(Client).Assembly); 

      ISessionFactory sessionFactory = cfg.BuildSessionFactory(); 
      IStatelessSession session = sessionFactory.OpenStatelessSession(); 

      IQuery query = session.GetNamedQuery("GetClients"); 
      query.SetParameter("int_SummitGroupId", 3173); 
      IList<Client> clients = query.List<Client>(); 

      Assert.AreNotEqual(0, clients.Count); 
     } 
     catch(Exception ex) 
     { 
      throw ex; 
     } 

我想我可能会不恰当地引用组装,因为把域模型,如果我这样做对象在MyComapny.MyProduct.Data.Oracle类中的作用。只有当我分离出两个项目时,我才会遇到这个问题。

回答

5

是的,这是可能的。如果映射位于程序集“MyCompany.MYProduct.Data.Oracle”上,则必须将该程序集传递给cfg.AddAssembly()。你正在使用汇编 “MyCompany.MyProduct.Core”

cfg.AddAssembly("MyCompany.MYProduct.Data.Oracle");

+0

谢谢!那只是我需要的答案。 – 2010-04-12 14:41:21

+0

@Blake Blackwell:不客气!乐意效劳 :-) – 2010-04-12 14:45:12