2009-07-28 8 views
0

Ich habe ein Elternteil Kind Beziehung Tabellen eingerichtet. In der Benutzeroberfläche zeige ich die Details der Eltern- und Kinddetails an. Nachdem der Benutzer Änderungen in UI machen, muss ich es zurück an die DB speichern, aber ich folgende Fehler bekommen:Update von Eltern-Kind-Datensätzen funktioniert nicht

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 = ?]"

und Innerexception ist:

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

hier die Details Abbildung ist: ELTERN:

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

KIND:

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

UND DER CODE:

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

Bitte lassen Sie mich wissen, was ich hier falsch mache und was zu ändern brauche ich Eltern und Kind in der Lage sein zu tun, Datensätze zu aktualisieren.
Vielen Dank für Ihre Hilfe.

+1

Warum ist das Community Wiki? – Brandon

Antwort

2

Im Kind Sie haben:

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

und

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

Beide beziehen sich auf die Spalte RegUsersId.

Ich denke, Sie werden die ersten ändern müssen = „false“ zu setzen und update = „false“:

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

Es ganz etwas anderes, obwohl sein könnte.

Allgemein gesprochen, obwohl Sie die Eigenschaft entfernen konnte und zu tun:

PaRegAddresses.RegUsers.Id 
+0

Danke für Ihre Antwort. Ich würde das ausprobieren und mein Ergebnis hier posten. – Teclioness