2009-11-11 33 views
6

¿Es posible crear asociados b/t 2 campos no clave en Entity Framework?Entity Framework Association con campos no clave

Ejemplo: tomar la 2 mesas en una aplicación de legado (es decir, las teclas/estructura puede no cambiar)

Order (
    OrderId : int : PK 
    OrderNo : varchar 
) 

OrderDetails (
    DetailRecordId : int : PK 
    OrderNo : varchar 
) 

En el marco de la entidad, quiero crear una asociación b/t Order y OrderDetails por el campo OrderNo , que no es una clave principal en ninguna tabla o una relación FK en la base de datos.

Esto me parece que no solo debe ser fácil de hacer, sino que es una razón para usar algo como EF. Sin embargo, parece que solo quiere permitirme crear asociaciones utilizando claves de entidad.

Respuesta

6

Entity Framework le permite reclamar que las columnas son claves y que existen restricciones de FK donde ninguna realmente existe en la base de datos.

Esto se debe a que la SSDL (parte de StorageModel del EDMX) puede ser manipulada si es necesario y mentir sobre la base de datos.

El EF interactuará con la base de datos como si las claves y las claves externas realmente existieran.

Esto debería funcionar, pero se aplican todas las advertencias normales sobre integridad referencial.

Ver mi esperanza Entity Framework Tips

esto ayuda.

+0

+1 Entonces, ¿esto significa que tengo que editar manualmente el archivo .edmx? –

+0

Desafortunadamente sí. –

+0

Gracias de nuevo. Una última pregunta. Si edito el EDMX, ¿cómo funciona eso cuando quiero usar el asistente para actualizar el modelo? ¿Se mantendrán mis cambios personalizados o una vez que inicie la ruta "Editar EDMX", ¿estoy obligado a realizar todos los cambios manualmente? –

1

El problema con el uso de campos no clave para definir las relaciones es que no se garantiza que las claves sean correctamente navegables. Eso podría conducir a una situación en la que tenga una relación de uno a uno entre dos entidades donde haya más de una posible fila que cumpla la relación.

... al relacionar datos de una base de datos, las relaciones siempre deben basarse en las claves. Las claves imponen la integridad referencial.

+3

. digamos que estoy 100% seguro de que esto no sucederá ... ¿me permitirá EF hacer la relación a pesar de que obviamente no es una buena práctica? –

0

Una solución más:

CREATE VIEW Vorder que no incluirá PK y crear Entidad de ella. Conjunto PK en esta entidad a OrderNo

Ahora usted será capaz de crear La cuestión es, sin embargo va a permitir que la asociación

Cuestiones relacionadas