NHibernate MappingException. Нет персистера - PullRequest
1 голос
/ 17 сентября 2009

Я пытаюсь заставить NHibernate работать. У меня есть этот класс:

mm.k.Domain.Kampagne

(пространство имен / сборка mm.k.Domain)

В другом проекте Visual Studio (Assembly mm.k.Infrastructure) я получил файлы Mapping (в каталоге Mappings), hibernate.cfg.xml и некоторые репозитории.

Вот мой файл сопоставления:

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

  <class name="Kampagne" table="Kampagner">
    <id name="Id">
      <generator class="identity" />
    </id>
    <property name="Navn" not-null="true" />
    <property name="Logo" />
  </class>

</hibernate-mapping>

Когда я настраиваю свою сессию, я делаю это:

_configuration.AddAssembly(typeof(mm.k.Domain.Kampagne).Assembly);

И вот что не работает! При звонке:

var test = session.Get<Kampagne>(kampagneId);

Я получаю следующую ошибку: "Не сохранять для: mm.k.Domain.Kampagne" Как будто он не регистрирует встроенный файл сопоставления. Обратите внимание, что для файла сопоставления установлено действие «Встроенный ресурс».

Если я изменю вышеприведенную строку на:

_configuration.AddFile(@"fullpath\mm.k.Infrastructure\Mappings\Kampagne.hbm.xml");

Все отлично работает!

Есть идеи? Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 22 февраля 2010

На случай, если у кого-то возникнет эта проблема с Hibernate.NET, как у меня. Убедитесь, что вы выбрали в окне свойств для своего файла Действие построения как «Встроенный ресурс» .

3 голосов
/ 17 сентября 2009

Не уверен, как выглядит ваш файл nhibernate.cfg.xml, но у меня обычно есть такой элемент

<mapping assembly="mm.K.Infrastructure"/>

на основании предоставленной вами информации. NHibernate использует это для загрузки файлов сопоставления из этой конкретной сборки.

Это должно дать вам необходимое отображение.

2 голосов
/ 13 октября 2011

У меня была проблема. Но вдруг заметил, что файл сопоставления не был внедрен. Перейдите в файл .hbm.xml. Нажмите свойства. Затем дополнительно -> Выбрать «Встроенный ресурс»

1 голос
/ 15 марта 2011

Каждый раз, когда вы используете файл hbm.xml, вы устанавливаете свой класс конфигурации следующим образом:

Configuration cfg = new Configuration();
cfg.Configure();
// Add class mappings to configuration object
cfg.AddAssembly(Assembly.GetCallingAssembly());
ISessionFactory sessionFactory = cfg.BuildSessionFactory();

Всякий раз, когда вы используете Nhibernate.Mapping.Attributes, как classe, вы должны будете использовать: Например, вы используете Mapping.attributes в классе продукта

Configuration cfg = new Configuration();
cfg.Configure();
// Add class mappings attributes to configuration object
cfg.AddInputStream(HbmSerializer.Default.Serialize(typeof(Model.Product);
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
...