NHibernate: нет постоянной ошибки - PullRequest
0 голосов
/ 28 марта 2010

В своем стремлении расширить свои знания я пытаюсь запустить NHibernate.

У меня есть следующая структура для моего решения

  • Базовый проект библиотеки классов
  • Проект библиотеки классов инфраструктуры
  • Прикладной проект MVC
  • Тестовый проект

В своем основном проекте я создал следующую сущность:

using System;

namespace Core.Domain.Model
{
    public class Category
    {
        public virtual Guid Id { get; set; }

        public virtual string Name { get; set; }
    }
}

В моем инфраструктурном проекте у меня есть следующее отображение:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
         namespace="Core.Domain.Model"
         assembly="Core">

  <class name="Category" table="Categories" dynamic-update="true">
    <cache usage="read-write"/>
    <id name="Id" column="Id" type="Guid">
      <generator class="guid"/>
    </id>
    <property name="Name" length="100"/>
  </class>
</hibernate-mapping>

Со следующим файлом конфигурации:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">server=xxxx;database=xxxx;Integrated Security=true;</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="cache.use_query_cache">false</property>
    <property name="adonet.batch_size">100</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <mapping assembly="Infrastructure" />
  </session-factory>
</hibernate-configuration>

В моем тестовом проекте у меня есть следующий тест

 [TestMethod]
        [DeploymentItem("hibernate.cfg.xml")]
        public void CanCreateCategory()
        {
            IRepository<Category> repo = new CategoryRepository();
            Category category = new Category();
            category.Name = "ASP.NET";

            repo.Save(category);

        }

При попытке запустить тест я получаю следующую ошибку:

Метод тестирования Volunteer.Tests.CategoryTests.CanCreateCategory вызвал исключение: NHibernate.MappingException: не сохраняется для: Core.Domain.Model.Category.

Любая помощь будет принята с благодарностью. У меня есть действие сборки cfg для встроенного ресурса.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 марта 2010

Действие сборки файла сопоставления XML должно быть установлено на Embedded Resource в сборке Infrastructure. Когда вы используете следующую инструкцию в вашем конфигурационном файле: <mapping assembly="Infrastructure" /> он будет искать отображения в качестве встроенных ресурсов в этой сборке.

0 голосов
/ 28 марта 2010

Я предполагаю, что проблема в том, что вы конфигурируете SessionFactory в своей тестовой сборке, не сообщая, что ваши отображения находятся в вашей базовой сборке, что-то вроде

ISessionFactory factory = new Configuration().Configure()
    .AddAssembly(typeof(Category).Assembly) <========***
    .BuildSessionFactory();

Если это не поможет, опубликуйте свой код конфигурации.

Приветствия
Berryl

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