2013-07-03 3 views
1

У меня есть asp.net-приложение и добавлена ​​библиотека с объектами домены и xml-файлами.NHibernate.MappingException Не удалось определить тип для: Entity

трассировка:

Message=Could not determine type for: VaLibrary.Core.Domain.VAEmpresa, VaLibrary, Version=1.0.5.18335, Culture=neutral, PublicKeyToken=null, for columns: NHibernate.Mapping.Column(IdDev) 

Источник = NHibernate

я поиск в веб-же ошибки, но решения для других вариантов отображения (свободно, замок и т.д.) не для XML

мой класс Код здесь

using System; 
    using System.Text; 
    using System.Collections.Generic; 
    namespace VaLibrary.Core.Domain { 

    public class VAEmpresa { 
     private int? _id; 
     private string _nombre; 
     private string _tipo; 
     public VAEmpresa() { 
      VAJu_Dev = new List<VAJu>(); 
      VAJu_Pub = new List<VAJu>(); 
     } 
     public virtual int Id { 
      get { 
       return (int)this._id; 
      } 
      set { 
       this._id = value; 
      } 
     } 
     public virtual string Nombre { 
      get { 
       return this._nombre; 
      } 
      set { 
       this._nombre = value; 
      } 
     } 
     public virtual string Tipo { 
      get { 
       return this._tipo; 
      } 
      set { 
       this._tipo = value; 
      } 
     } 
     public virtual IList<VAJu> VAJu_Dev { get; set; } 
     public virtual IList<VAJu> VAJu_Pub { get; set; } 
    } 
} 

и ссылка:

using System; 
using System.Text; 
using System.Collections.Generic; 
namespace VaLibrary.Core.Domain { 

    public class VAJu { 
     private int? _id; 
     private VAEmpresa _idDev; 
     private VAEmpresa _idPub; 
     private VACon _vACon; 
     private string _titulo; 
     private int _numerop; 
     public VAJu() { 
      VApllist = new List<VApllist>(); 
     } 
     public virtual int Id { 
      get { 
       return (int)this._id; 
      } 
      set { 
       this._id = value; 
      } 
     } 
     public virtual VAEmpresa IdDev { 
      get { 
       return this._idDev; 
      } 
      set { 
       this._idDev = value; 
      } 
     } 
     public virtual VAEmpresa IdPub { 
      get { 
       return this._idPub; 
      } 
      set { 
       this._idPub = value; 
      } 
     } 
     public virtual VACon VACon { 
      get { 
       return this._vACon; 
      } 
      set { 
       this._vACon = value; 
      } 
     } 
     public virtual string Titulo { 
      get { 
       return this._titulo; 
      } 
      set { 
       this._titulo = value; 
      } 
     } 
     public virtual int Numerop { 
      get { 
       return this._numerop; 
      } 
      set { 
       this._numerop = value; 
      } 
     } 
     public virtual IList<VApllist> VApllist { get; set; } 
    } 
} 

Отображения файлы:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping assembly="VaLibrary" namespace="VaLibrary.Core.Domain" xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="VAEmpresa" table="VA-Empresa" lazy="true" > 
    <id name="Id" column="Id"> 
     <generator class="identity" /> 
    </id> 
    <property name="Nombre"> 
     <column name="nombre" sql-type="varchar" not-null="true" /> 
    </property> 
    <property name="Tipo"> 
     <column name="tipo" sql-type="varchar" not-null="false" /> 
    </property> 
    <bag name="VAJu_Dev" inverse="true" cascade="none"> 
     <key column="IdDev" /> 
     <one-to-many class="VaLibrary.Core.Domain.VAJu, VaLibrary" /> 
    </bag> 
    <bag name="VAJu_Pub" inverse="true" cascade="none"> 
     <key column="IdPub" /> 
     <one-to-many class="VaLibrary.Core.Domain.VAJu, VaLibrary" /> 
    </bag> 
    </class> 
</hibernate-mapping> 

и

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping assembly="VaLibrary" namespace="VaLibrary.Core.Domain" xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="VAJu" table="VA-Ju" lazy="true" > 
    <id name="Id" column="Id"> 
     <generator class="identity" /> 
    </id> 
    <property name="Titulo"> 
     <column name="Titulo" sql-type="varchar" not-null="true" /> 
    </property> 
    <many-to-one insert="false" update="false" lazy="false" name="IdDev"> 
     <column name="IdDev" sql-type="int" not-null="true" /> 
    </many-to-one> 
    <property name="IdDev"> 
     <column name="IdDev" sql-type="int" not-null="true" /> 
    </property> 
    <many-to-one insert="false" update="false" lazy="false" name="IdPub"> 
     <column name="IdPub" sql-type="int" not-null="true" /> 
    </many-to-one> 
    <property name="IdPub"> 
     <column name="IdPub" sql-type="int" not-null="true" /> 
    </property> 
    <property name="Numerop"> 
     <column name="numero-p" sql-type="int" not-null="true" /> 
    </property> 
    <bag name="VApllist" inverse="true" cascade="none"> 
     <key column="IdJu" /> 
     <one-to-many class="VApllist" /> 
    </bag> 
    </class> 
</hibernate-mapping> 

relantionship в БД: Ва-Ju.IdDev ФК к VA-Empresa.Id PK va- JU.IdPub FK к VA-Empresa.Id PK

Я пытаюсь изменить для , но это sa меня.

Я могу это сделать?

Большое спасибо за ваши ответы

[Редактировать]

я использую Nhibernate 3,2

+0

Почему у вас есть идентификатор объекта как обнуляемый. Интересно, вызывает ли это проблемы, поскольку это не имеет большого смысла с точки зрения целостности данных. –

ответ

1

Отображения отсутствует правильный реляционной(объект объект) отображения. Лучший способ, как объяснить, что это пример:

Изменить это:

private VAEmpresa _idDev; 

public virtual VAEmpresa IdDev 
{ 
    get { return this._idDev; } 
    set { this._idDev = value; } 
} 

В это:

private VAEmpresa _dev; 

public virtual VAEmpresa Dev // Reference Object 
{ 
    get { return this._idDev; } 
    set 
    { 
     this._idDev = value; 
     if(_idDev != null)  // assure that with reference change 
     {      // the referenceId is changed as well 
      IdDev = _idDev.Id 
     } 
    } 
} 
public virtual int IdDev { get; set; } // Refernece Id 

Теперь у нас есть два представления Dev ссылки (который имеет тип VAEmpresa и имеет int id). И мы можем отобразить его рабочий путь.Так

Изменить это:

<many-to-one insert="false" update="false" lazy="false" name="IdDev"> 
    <column name="IdDev" sql-type="int" not-null="true" /> 
</many-to-one> 
<property name="IdDev"> 
    <column name="IdDev" sql-type="int" not-null="true" /> 
</property> 

В том, что:

<many-to-one name="Dev" class="VAEmpresa" column="IdDev" 
     insert="false" update="false" lazy="false" /> 
<property name="IdDev" not-null="true" /> 

С этого момента, NHibernate будет знать, где искать Dev недвижимость в БД. Это будет столбец IdDev и класс для создания экземпляра является VAEmpresa

Если код требует только идентификаторСсылкиIdDev ... у нас есть это.

МАЛЕНЬКАЯ ПРИМЕЧАНИЕ: мой опыт заключается в использовании разных только для чтения настройка. Редактируемая ссылка, readonly is referencId. Это заставляет код работать с существующими объектами VAEmpresa, тогда как IdDev может быть любым целым числом. Обработка сложна, но приносит плоды позже

+0

У меня было много проблем, код генерирует мне NHG [link] (http://nmg.codeplex.com/). Не знаю, почему мне пришлось многое изменить – user2547522

0

Идентификатор может потребовать типа. У вас есть:

<id name="Id" column="Id"> 
    <generator class="identity" /> 
</id> 

Попробуйте указать тип следующим образом:

<id name="Id" > 
    <column name="Id" sql-type="int" not-null="true" unique="true" /> 
    <generator class="identity" /> 
</id> 

Еще одна проблема, вы забыли поставить имя колонн/доменов в собственности мешок. Вам нужно указать фактическое имя столбца, а не имена свойств. Позвольте мне показать вам для VAJu:

<bag name="VApllist" inverse="true" cascade="none"> 
    <key column="Id" /> 
    <one-to-many class="VaLibrary.Core.Domain.VApllist" column="Id" /> 
</bag> 
+0

В этом решении я исправил свойство имени столбца. Пожалуйста, смотрите. – rgrano

+0

не работает, когда я добавляю их, troww ошибка «Не удалось скомпилировать документ сопоставления» в строке тега «colum», но я использую в любом случае не работает :( – user2547522

+0

Возьмите «column =« Id »из тега« id »и добавьте его следующим образом: rgrano

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