2009-03-30 18 views
49

Ho una mappatura lungo le linee di questo.nHibernate, nessuna riga con l'identificatore fornito esiste

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" schema="etl" assembly="Model" default-lazy="false"> 
    <class name="Model.Entities.DataField, Model" table="mdm_field"> 
    <id name="FieldId" column="field_id" type="int"> 
     <generator class="native" /> 
    </id> 
    <many-to-one name="KeyField" class="Model.Entities.Key, Model" column="field_id" /> 
    </class> 
</hibernate-mapping> 

Ora nel database del field_id nella tabella mdm_field a volte ha un valore che non esiste nella relativa tabella di key_field, quindi è praticamente rotto l'integrità referenziale. Per questo motivo quando carico l'entità, ricevo un errore "Nessuna riga con l'identificatore fornito esiste". Come configuro la mappatura per lavorare con questa situazione in modo che non muoia in questa situazione.

+0

ho la stessa mappatura, sai come trovare tutti i modelli senza KeyField? –

risposta

75

Ok, ho trovato la risposta. Aggiungere l'attributo

not-found="ignore" 

alla proprietà KeyField:

<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" /> 
+2

Anche questo mi ha fatto inciampare. Per le annotazioni, utilizzare @NotFound (action = NotFoundAction.IGNORE). – NobodyMan

+5

Sto riscontrando un problema simile con Fluent NHibernate. Ted, se tu potessi indicare una correzione adeguata, sarei molto riconoscente. FWIW, mettendo .NotFound.Ignore() sul KeyField non ha comunque aiutato nel mio caso. – BobC

+1

@Ted Cura di elaborare il motivo per cui non è una soluzione valida valida? –

4

Nel mio caso il problema è stato a causa di un vincolo di chiave esterna non è stato applicato dal motore di MyISAM e quindi una delle righe finito che punta a un valore inesistente e il proxy ha generato un'eccezione. Suggerirei di verificare che il set di dati sia coerente in questo caso.

4

Prova che ...

public void Override(ModelMapper modelMapper) { 
    modelMapper.Class<T>(c => { 
     c.ManyToOne(m => m.FKObj, r => { 
      r.Column("FKColumn"); 
      r.NotFound(NotFoundMode.Ignore); // THIS IS IMPORTANT!!! 
     }); 
    }); 
} 
Problemi correlati