2012-01-29 49 views
1

我在每個我有相同的主列名(「ID」)獨特的名字

我從NHibernate的得到錯誤數據庫表:

System.IndexOutOfRangeException : An SqlCeParameter with 
ParameterIndex '5' is not contained by this SqlCeParameterCollection 

當我改變這些列名唯一名字,一切都好。

但我不知道如何解決它沒有名稱的變化。我只是想在每個表中使用相同的名稱。

<class name="AppSignature" table="app_signatures" lazy="true"> 
    <id name="Id"><generator class="guid"></generator></id> 

    </class> 

    <class name="AppState" table="app_states" lazy="true"> 
    <id name="Id"><generator class="guid"></generator></id> 

    <many-to-one name="app_signature" 
       class="AppSignature"     
       column="Id" 
       foreign-key="id_fom_app_signature" 
       not-null="true"     
       >   
    </many-to-one> 

    </class> 

回答

2

多對一關係表示一個AppState實例最多可以分配給一個AppSignature實例。向AppSignature分配任意數量的AppState實例。該關係作爲從app_states表到app_signatures表的外鍵實現。 「多對一」元素中的「列」屬性確定存儲外鍵值的列名稱。向Id列映射兩個AppState成員:Id和app_signature,這在NH中是不可能的,並導致所描述的異常。 解決方法是簡單的:

<many-to-one name="app_signature" 
      class="AppSignature"     
      column="app_signature_id" 
      foreign-key="id_fom_app_signature" 
      not-null="true"     
      >   
</many-to-one> 

實現外鍵列的名稱更改爲一個唯一的名字: 「app_signature_id」。現在app_signature成員映射到指向app_signatures.Id列的AppState.app_signature_id列

但是,所描述的異常應該消失(如果新列已正確添加到app_signatures表中),它並不一定是您真正想要的。 AppState和AppSignature之間的關係可以是一對一的。這意味着AppState instnace可以分配給單個AppSignature instnance,反之亦然。這種關係可以通過同一列上的主鍵和外鍵來實現。關於一對一關係有一個很好的article

+0

我得到與流利nhib相同的錯誤 - 你有任何想法如何解決? – 2013-04-08 21:51:49