2009-07-28 13 views
0

親子関係テーブルが設定されています。 UIでは、親と子の詳細の詳細を表示します。ユーザーの後UIの変更を行い、私は戻って、DBに保存する必要がありますが、私は次のようなエラーになっています:親レコードと子レコードの更新が機能しない

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.

は、マッピングの詳細です: をPARENT:

<?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> 

CHILD:

<?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

なぜ、このコミュニティのwikiがある:あなたがプロパティを削除して行うことができても

一般的にいえば? – Brandon

答えて

2

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

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

の両方が列RegUsersIdを参照してください。

私はあなた=「false」を、更新=「false」に挿入するために最初のものを変更する必要がありますと思う:

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

それは完全にかかわらず、何か他のものである可能性があります。

PaRegAddresses.RegUsers.Id 
+0

お返事ありがとうございます。私はこれを試して、私の結果をここに掲載します。 – Teclioness

関連する問題