2009-03-30 10 views
49

Tengo un mapeo en esta línea.nHibernate, No existe una fila con el identificador dado

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

Ahora en la base de datos del identificador de campo en la tabla mdm_field veces tiene un valor que no existe en la tabla key_field relacionada, por lo que se divide básicamente la integridad referencial. Debido a esto, cuando cargo la entidad, aparece el error "No existe una fila con el identificador dado". ¿Cómo configuro la asignación para que funcione con esta situación para que no muera en esta situación?

+0

tengo la misma asignación, ¿sabe cómo encontrar todos los modelos sin KeyField? –

Respuesta

75

Ok, encontré la respuesta. Añadir el atributo

not-found="ignore" 

a la propiedad KeyField:

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

Esto me hizo tropezar también. Para anotaciones, use @NotFound (action = NotFoundAction.IGNORE). – NobodyMan

+5

Me encuentro con un problema similar con Fluent NHibernate. Ted, si pudieras señalar una solución adecuada, estaría muy agradecido. FWIW, poniendo .NotFound.Ignore() en KeyField no ayudó en mi caso de todos modos. – BobC

+1

@Ted Care para explicar por qué no es una solución válida? –

4

En mi caso el problema fue debido a una restricción de clave externa no fue aplicada por el motor MyISAM y por lo tanto una de las filas terminó señalando una valor no existente y el proxy arrojó una excepción. Yo recomendaría verificar que su conjunto de datos sea consistente en este caso.

4

Intenta que ...

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!!! 
     }); 
    }); 
} 
Cuestiones relacionadas