6

Tengo las siguientes entidades en mi EDMX: -. alt texta tener serios problemas con Entity Framework y extranjeros Claves :(

Estos dos ENTIDADES fueron generados por Modelo de actualización de la base de datos

Ahora , notar cómo mi país tiene la siguiente clave primaria: -

Nombre & IsoCode

esto se debe a que cada país es ÚNICO en el sistema por nombre e IsoCode.

Ahora, con mis estados ... es similar. Clave principal es: -

Nombre & CountryId

Cada estado es único por su nombre y por país.

Ahora, la clave externa para los estados es un Id País. Este es el sql: -

ALTER TABLE [dbo].[States] WITH CHECK ADD 
     CONSTRAINT [FK_States_Countries] FOREIGN KEY([CountryId]) 
REFERENCES [dbo].[Countries] ([CountryId]) 
ON UPDATE CASCADE 
GO 

ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries] 
GO 

Cosas bastante simples.

PERO ADO.NET Entity Framework no le gusta :(Está asumiendo que necesito para conectar algunas propiedades de State entidad a las propiedades de clave principal en la entidad Country.

¿Es posible añadir una asociación entre el campo y Estado de Country.CountryId < -> State.CountryId ... como si tuviera asignada en mi DB

Saludos;)

+0

@ Alex James: ¿estás cerca para ayudar, amable señor? –

+0

Yeap ... ver la respuesta a continuación! –

Respuesta

10

en EF (3.5 y 4.0) FKs debe apuntar a claves principales?.

Pero Parece que está tratando de apuntar a una clave candidata (es decir, [países]. [CountryId]

Sé que esto es algo que el equipo EF están considerando para la próxima versión aunque :)

esperanza esto ayuda

Alex

+0

Gracias amablemente Alex por responder mi pregunta. Sinceramente lo aprecio :) Parece que voy a volver a hacer que las identidades sean las PK y agregue restricciones únicas. Doh :) siempre un paso adelante de las compilaciones actuales de EF ... :) Gracias otra vez compañero, realmente amo tu ayuda :) ¡sigue así! –

+4

Miré los documentos de cambio de CTP5 y no vi nada relacionado con esto. ¿Todavía se está considerando esta característica, o en la tubería, o ...? Este es un verdadero obstáculo para el mapeo de bases de datos heredadas. –

0

Para la normalización adecuada DB, lo primero es que las claves primarias deben ser solamente CountryId y IdentificadorEstado campos: los principales campos Id para cada tabla.

y SS veo partir de la descripción Nombre & IsoCode y Nombre & CountryId debería ser en realidad claves únicas, no primarios.

Entonces la clase del modelo Estado debe tener un campo:

public Country Country { get; set; } 

Ahora EF tienen muy buenos ejemplos y desde 4.3.1 + Es totalmente compatible con Código primeros primeros modelos/DB, que creo que aliviará resolviendo esto EF 5 tiene más actualizaciones de compatibilidad, así que creo que no será un problema para los motores DB heredados.

+0

A menos que haya malinterpretado su respuesta de alguna manera, esto está completamente fuera del alcance de la pregunta. "¿Es posible agregar una ASOCIACIÓN entre País y Estado en Country.CountryId <-> State.CountryId" es la pregunta, como en "¿Puedo agregar una asociación en algo que no sea una clave principal (la clave candidata en este caso) " – tim

Cuestiones relacionadas