2013-07-03 40 views
1

我有一個asp.net應用程序,並添加一個庫與我的域對象和xml文件。NHibernate.MappingException無法確定類型:實體

痕跡:

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的

我在web相同的錯誤進行搜索,但是,解決方案是其他映射選項(流暢,城堡等)不用於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> 

在DB的relantionship是: VA-Ju.IdDev FK到VA-Empresa.Id PK VA- JU.IdPub FK到VA-Empresa.Id PK

我嘗試更改爲 ,但它是sa我。

我能做到嗎?

非常感謝你對你的答案

[編輯]

我使用NHibernate的3.2

+0

爲什麼你有實體ID爲可爲空。我想知道這是否會造成麻煩,因爲從數據完整性的角度來看,這並沒有多大意義。 –

回答

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的會知道哪裏來搜索DB Dev財產。這將是列IdDev和類實例是VAEmpresa

如果代碼只需要在referenceIdIdDev ...我們也有它。

小注:我的經驗是使用不同的只讀設置。可編輯是參考,只讀參考。這迫使代碼與現有的VAEmpresa對象一起工作,而IdDev可以是任何整數。處理是複雜的,但後來帶來成果

+0

我有很多問題,代碼生成我NHG [鏈接](http://nmg.codeplex.com/)。不要你理解爲什麼我必須改變很多事情 – user2547522

0

的ID可能需要的類型。您有:

<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

沒有工作,當我添加這些,trohw錯誤「無法編譯映射文檔」在「colum」標籤的行中,但我使用無論如何不工作:( – user2547522

+0

從「id」標記中取出「column =」Id「並添加它如下 rgrano

相關問題