2009-07-28 90 views
0

我設置了父母子女關係表。在用戶界面中,我會顯示父母和孩子的詳細信息。用戶使UI的變化後,我要保存回數據庫,但我得到以下錯誤:更新父母和子女記錄不起作用

NHibernate.ADOException was caught

Message="could not update: [PlanningMaps.vo.PaRegAddresses#2][SQL: UPDATE PaRegAddresses SET RegUserId = ?, AddressCity = ?, AddressCountry = ?, AddressLine = ?, AddressLine1 = ?, AddressPostcode = ?, RegUserId = ?, IsBillingAddress = ?, IsShippingAddress = ? WHERE RegAddressID = ?]"

和的InnerException是:

System.Data.SqlClient.SqlException: Column name 'RegUserId' appears more than once in the result column list.

這裏是映射的詳細信息: 家長:

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="PlanningMaps.vo" assembly="PlanningMaps.vo"> 
    <class name="PaRegUser, __code" table="PaRegUsers" lazy="false"> 
     <id name="Id" type="Int64" column="RegUserId"> 
      <generator class="identity" /> 
     </id> 
     <property name="RegTradeName" column="RegTradeName" type="String" /> 
     <property name="RegTitle" column="RegTitle" type="String" /> 
     <property name="RegContactName" column="RegContactName" type="String" /> 
     <property name="RegPassword" column="RegPassword" type="String" /> 
     <property name="RegEmail" column="RegEmail" type="String" /> 
     <property name="RegPhoneNumber" column="RegPhoneNumber" type="String" /> 
     <bag name="PaRegAddresses" inverse="true" cascade="all-delete-orphan" lazy="false"> 
      <key column="RegUserID" /> 
      <one-to-many class="PaRegAddresses, App_Code" /> 
     </bag> 
    </class> 
</hibernate-mapping> 

子:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="PlanningMaps.vo" assembly="PlanningMaps.vo"> 
    <class name="PaRegAddresses, __code" table="PaRegAddresses" lazy="false"> 
     <id name="Id" type="Int64" column="RegAddressID"> 
      <generator class="identity" /> 
     </id> 
     <property name="RegUserId" column="RegUserId" type="Int64" /> 
     <property name="AddressCity" column="AddressCity" type="String" /> 
     <property name="AddressCountry" column="AddressCountry" type="String" /> 
     <property name="AddressLine" column="AddressLine" type="String" /> 
     <property name="AddressLine1" column="AddressLine1" type="String" /> 
     <property name="AddressPostcode" column="AddressPostcode" type="String" /> 
     <many-to-one name="RegUsers" column="RegUserId" not-null="true" class="PaRegUser, App_Code" /> 
     <property name="IsBillingAddress" column="IsBillingAddress" type="Boolean" /> 
     <property name="IsShippingAddress" column="IsShippingAddress" type="Boolean" /> 
    </class> 
</hibernate-mapping> 

和代碼:

public void UpdateRegCustomer(PaRegUser regUser) 
    { 
    ITransaction tx = null; 
    try 
     { 
     if (!session.IsConnected) 
      { 
      session.Reconnect(); 
      } 

     tx = session.BeginTransaction(); 

     if (regUser != null) 
      session.Update(regUser); 
      tx.Commit(); 
      } 
     session.Disconnect(); 
     } 
    catch (Exception ex) 
     { 
     tx.Rollback(); 
     session.Disconnect(); 
     log.Error("UpdateRegCustomer(PaRegUser regUser) method", ex); 
     throw ex; 
     // handle exception 
     } 
    } 

請讓我知道它是什麼,我做錯了什麼變化,我需要做的是能夠更新父和子記錄。
謝謝你的幫助。

+1

這是爲什麼社會維基? – Brandon 2009-07-28 14:07:38

回答

2

在孩子你有:

<property name="RegUserId" column="RegUserId" type="Int64" /> 

<many-to-one name="RegUsers" column="RegUserId" not-null="true" class="PaRegUser, App_Code" /> 

都指向列RegUsersId。

我認爲你必須改變的第一個插入=「假」和更新=「假」:

<property name="RegUserId" column="RegUserId" type="Int64" insert="false" update="false" /> 

這可能是別的東西完全雖然。

一般來說雖然你可以刪除的財產,這樣做:

PaRegAddresses.RegUsers.Id 
+0

感謝您的回覆。我會試試這個,並在此發佈我的結果。 – Teclioness 2009-07-29 13:01:48