2009-07-28 5 views
0

J'ai des tables de relation parent-enfant configurées. Dans l'interface utilisateur, je montre les détails des détails des parents et des enfants. Après que l'utilisateur fait des changements dans l'interface utilisateur, je dois enregistrer revenir à la DB, mais je reçois l'erreur suivante:Mise à jour des enregistrements parent et enfant ne fonctionnant pas

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

et InnerException est:

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

Voici les détails cartographiques: 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> 

ENFANT:

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

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

S'il vous plaît laissez-moi savoir ce qu'il est que je fais mal ici et ce changement que je dois faire pour être en mesure de mettre à jour les dossiers parents et enfants.
Nous vous remercions de votre aide.

+1

Pourquoi est-ce wiki communautaire? – Brandon

Répondre

2

Chez l'enfant que vous avez:

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

et

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

Les deux se réfèrent à la colonne RegUsersId.

Je pense que vous devrez changer le premier à insérer = « false » et mise à jour = « false »:

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

Il pourrait être tout autre chose que.

D'une manière générale que vous pouvez supprimer la propriété et à faire:

PaRegAddresses.RegUsers.Id 
+0

Merci pour votre réponse. Je voudrais essayer cela et poster mon résultat ici. – Teclioness

Questions connexes