2009-09-16 6 views
1

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

mm.k.Domain.Kampagne 

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

В другом проекте Visual Studio (Собрание mm.k.Infrastructure) Я получил мою Mapping файлов (в Каталог сопоставлений), my hibernate.cfg.xml и некоторые репозитории.

Heres мое отображение файла:

<?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» Как он не регистрирует встроенное отображение FILD. Обратите внимание, что у меня есть действие сборки для файла сопоставления, установленного в Embedded Resource.

Если изменить эту строку на:

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

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

Любые идеи? Заранее спасибо.

ответ

3

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

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

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

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

+0

Это сделало трюк. Спасибо! Strangethat the NHibernate, начинающий учебник, не упоминает об этом? –

7

Если у кого-то будет проблема с Hibernate.NET, как и я. Убедитесь, что вы выбрали в окне свойств для своего файла Build Action как «Embedded Resource».

+0

Отлично, это сделало это для меня, в отличие от любого другого ответа здесь. Ницца. – thomas

1

Всякий раз, когда вы используете файл 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 как Классе вы должны будете использовать: Например, вы должны использовать Mapping . атрибуты в классе продукта

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(); 
2

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

Смежные вопросы