NHibernate, No existe ninguna fila con el identificador dado


Tengo un mapeo en la línea de esto.

<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 el field_id en la tabla mdm_field a veces tiene un valor que no existe en la tabla key_field relacionada, por lo que básicamente es integridad referencial rota. Debido a esto cuando cargo la entidad obtengo un error "No existe ninguna 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.

Author: Craig, 2009-03-30

3 answers

Ok, encontré la respuesta. Añadir el

not-found="ignore"

Atributo a la propiedad KeyField:

<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" />
 76
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-25 11:43:14

En mi caso, el problema se debió a que el motor MyISAM no aplicó una restricción de clave foránea y, por lo tanto, una de las filas terminó apuntando a un valor inexistente y el proxy lanzó una excepción. Yo recomendaría comprobar que su conjunto de datos es consistente en este caso.

 5
Author: Shagglez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-27 11:04:28

Prueba eso...

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!!!
        });
    });
}
 5
Author: Rodolpho Brock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-05 17:36:06