Pregunta

Estoy usando el marco de la entidad y parte de mi código quiero poner las entidades de decir 100 a la base de datos. Algunas de las entidades que estoy insertando tienen muchas de las relaciones y quiero asegurarme de que solo estoy insertando elementos nuevos. Es fácil verificar los existentes en el DB, pero si ya lo he insertado en mi sesión actual para persistir los 100 elementos, obtendré elementos repetidos.

La cosa es que la clave principal se genera automáticamente y la singularidad de la tabla proviene de una columna única que no es compatible con EF. ¿Cómo verifico si aún no he insertado la parte del elemento de mi sesión en EF 4.1? Vi el método Find en el DBContext, pero eso necesita la tecla Primay que no puedo usar. Dado que uso 4.1, también estoy atrapado con DBContext. ¿Cómo puedo tener una forma genérica de verificar esto?

¿Fue útil?

Solución

Si desea usar EF, debe seguir con PK como identificación única de sus entidades. De lo contrario, su experiencia de desarrollo será bastante mala.

Si desea verificar si ya procesó el mismo elemento en el uso del contexto actual:

bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId)

Si necesita verificar el estado del uso de la entidad:

EntityState state = context.Entry(entity).State;

Si necesita verificar si la entidad existe en el uso de la base de datos:

YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId);

La última declaración en realidad no es la mejor manera en el sistema concurrente porque cuando la llamas la entidad no tiene que existir, pero una vez que llamas SaveChanges Otro proceso ya podría insertar la entidad. No hay una manera fácil de lidiar con eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top