Модель домена nHibernate и файлы сопоставления в отдельных проектах - PullRequest
4 голосов
/ 12 апреля 2010

Есть ли способ разделить доменные объекты и файлы сопоставления на два отдельных проекта? Я хотел бы создать один проект с именем MyCompany.MyProduct.Core, который содержит мою модель домена, и другой проект, который называется MyCompany.MYProduct.Data.Oracle, который содержит мои сопоставления данных Oracle. Однако, когда я пытаюсь выполнить модульное тестирование, я получаю следующее сообщение об ошибке:

Именованный запрос '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, он будет работать. Только когда я разделяюсь на два проекта, я сталкиваюсь с этой проблемой.

1 Ответ

6 голосов
/ 12 апреля 2010

Да, это возможно. Если сопоставления находятся в сборке «MyCompany.MYProduct.Data.Oracle», то вы должны передать эту сборку в cfg.AddAssembly (). Вы используете сборку "MyCompany.MyProduct.Core"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...