2009-12-08 109 views
0

使用功能NHibernate具有自動映射,我試圖映射以下領域:NHibernate的映射錯誤 - 無效的子元素「多到一個」

public class Company: IModel 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

public class Account: IModel 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Company Company { get; set; } 
} 

一個公司可以有多個帳戶。總的來說,我會直接獲得一個賬戶,然後偶爾想找到相關的公司,所以不需要公司模型中的賬戶清單。

功能NHibernate創建以下HBMS:

公司

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true"> 
    <class xmlns="urn:nhibernate-mapping-2.2" name="DataModel.Company, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Company`"> 
    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Id" /> 
     <generator class="identity" /> 
    </id> 
    <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Name" /> 
    </property> 
    </class> 
</hibernate-mapping> 

帳戶

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true"> 
    <class xmlns="urn:nhibernate-mapping-2.2" name="DataModel.Account, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Account`"> 
    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Id" /> 
     <generator class="identity" /> 
    </id> 
    <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Name" /> 
    </property> 
    <many-to-one class="DataModel.Company, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Company"> 
     <column name="Company_id" /> 
    </many-to-one> 
    </class> 
</hibernate-mapping> 

而且我收到以下錯誤:

The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'many-to-one' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-mapping-2.2'.

我需要做什麼才能使其成爲有效的映射?

回答

1

問題原來不是與這些域類。我在同一個程序集中有一個Repository類,這個Fluent NHibernate顯然試圖包含在這個域中。這是導致錯誤的這個類的嘗試映射(不幸的是錯誤消息沒有說出哪種類型導致了問題)。

我通過在命名空間上添加一個where約束來修復它。