2015-06-04 3 views
1

Я не знаю, где ошибка.NHibernate не удалось скомпилировать отображение

Я использую NHibernate C# и присоединяю сборку к конфигурации. Проблема NHibernateException: Не удалось скомпилировать отображение Note.hbm.xml

public static class NHibernateHelper 
{ 
    private static Configuration _cfg; 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory { 
     get { 
      if (_sessionFactory == null) { 
       _cfg = new Configuration(); 
       _cfg.Configure(); 

       _cfg.AddAssembly(typeof(User).Assembly); 
       _cfg.AddAssembly(typeof(Changelog).Assembly); 
       _cfg.AddAssembly(typeof(Note).Assembly); 


       _sessionFactory = _cfg.BuildSessionFactory(); 
      } 

      return _sessionFactory; 
     } 
    } 


    public static ISession OpenSession() { 
     return SessionFactory.OpenSession(); 
    } 

    public static void DatabaseSchemaLoader() { 
     ISession session = OpenSession(); 
     new SchemaExport(_cfg).Create(true, true); 
     session.Close(); 
    } 
} 

My Note класса shared.data.content

namespace CRMSystem.shared.data.content 
{ 
    public class Note 
    {  
     public virtual int id { get; set; } 
     public virtual string title{ get; set;} 
     public virtual string text { get; set; } 
     public virtual int priority { get; set; } 
     public virtual long createdTime { get; set; } 
     public virtual long lastEditTime { get; set; }  
    } 
} 

Note.hbm.xml (комплект сборки действия: внедренный ресурс, скопировать на выход: копировать всегда)

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="CRMSystem" 
        namespace="CRMSystem.shared.data.content"> 

    <class name="Note" table="`Note`" lazy="false"> 


    <id name="id" column="`id`" type="int"> 
     <generator class="identity"></generator> 
    </id> 

    <property name="title" column="`title`" type="String"/> 
    <property name="text" column="`text`" type="String" /> 
    <property name="priority" column="`priority`" type="int" /> 
    <property name="createdTime" column="`createdTime`" type="long" /> 
    <property name="lastEditTime" column="`lastEditTime`" type="long" /> 
    </class> 
</hibernate-mapping> 

Спасибо за ваш ответ.

Я попытался сегодня во многих отношениях и обнаружил, что она работает:

_cfg.Configure(); 
_cfg.AddAssembly(typeof(User).Assembly); 
//_cfg.AddAssembly(typeof(Changelog).Assembly); 
//_cfg.AddAssembly(typeof(Note).Assembly); 

Когда я добавляю: (любой класс)

_cfg.AddAssembly(typeof(Changelog).Assembly); 

Каждого я получаю сообщение об ошибке: Не удаюсь скомпилировать Примечание .hbm.xml Я могу сохранить базу данных в каждом классе (User, Changelog, Note). Не могу объяснить.

Есть ли у кого-нибудь такие ситуации?

Полное исключение:

NHibernate.MappingException: Could not compile the mapping document: CRMSystem.shared.data.mapping.Note.hbm.xml ---> NHibernate.DuplicateMappingException: Duplicate class/entity mapping CRMSystem.shared.data.content.Note 
    w NHibernate.Cfg.Mappings.AddClass(PersistentClass persistentClass) 
    w NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(HbmClass classSchema, IDictionary`2 inheritedMetas) 
    w NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(HbmClass rootClass, IDictionary`2 inheritedMetas) 
    w NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema, IDictionary`2 inheritedMetas) 
    w NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(HbmMapping mappingSchema) 
    w NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) 
    --- Koniec śladu stosu wyjątków wewnętrznych --- 
    w NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) 
    w NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) 
    w NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) 
    w NHibernate.Cfg.Configuration.ProcessMappingsQueue() 
    w NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument document) 
    w NHibernate.Cfg.Configuration.AddXmlReader(XmlReader hbmReader, String name) 
    w NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) 
    w NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly) 
    w NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly) 

Когда я ничего не добавлять, я получаю исключение: не стойкая бактерия

+0

возможно удалить одиночный coute в атрибуте столбца Note.hbm.xml – DanielVorph

+0

Во-первых - переместите ВАШ ответ в свой вопрос. Удалите этот ответ. Во-вторых, вы могли бы также добавить полный стек внутреннего исключения? Как я? Будет ясный ответ –

+0

Не могли бы вы показать ** полное исключение **? Точно после вашего цитирования * Не удалось скомпилировать Note.hbm.xml * - именно эта следующая строка четко говорит о том, в чем проблема. Соблюдайте мой собственный ответ, и вы увидите такой экстракт, который я создал для вас ... –

ответ

1

НЕ РАСПРОСТРАНЯЕТСЯ

Основываясь на последнем обновлении, мы можем видеть, что NHiberante обвиняет в:

... Duplicate class/entity mapping CRMSystem.shared.data.content.Note ...

А это значит, что в нашем случае другой файл может c для отображения ПРИМЕЧАНИЕ, например. в user.hbm.xml там может быть некоторые забытые выполните картирование

<class name="Note" ... 

ORIGINAL часть

код нормально как. Я пробовал на местном уровне с вашим Note класс и Note.hbm.xml. Работа как ожидалось.

Проблема, похоже, некоторая орфографическая ошибка, которую трудно воспроизвести (например, другое название сборки). Или, несмотря на вину на Note.hbm.xml ... это также может быть каким-то другим выполните картирование

// there could be also some issue 
_cfg.AddAssembly(typeof(User).Assembly); 
_cfg.AddAssembly(typeof(Changelog).Assembly); 

В любом случае, старайтесь соблюдать внутреннее исключение. Будет ясное описание проблемы. Например.для этого отображения

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
       // instead of this 
       // assembly="CRMSystem" 
       // we have this 
       assembly="WrongAssembly" 
       namespace="CRMSystem.shared.data.content"> 

Мы получили бы полное исключение:

NHibernate.MappingException: Could not compile the mapping document: ...Note.hbm.xml ---> NHibernate.MappingException: persistent class
CRMSystem.shared.data.content.Note, WrongAssembly not found ---> System.IO.FileNotFoundException: Could not load file or assembly 'WrongAssembly' or one of its dependencies. The system cannot find the file specified.WRN: Assembly binding logging is turned OFF.

Примечания: внедренного ресурс свойства должен не копирует предлагается. Этот файл будет частью dll, его не нужно копировать как файл.

+0

Любой прогресс? вы нашли привидение '

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