Principales respuestas
Error Entity Framework Core Relacion uno a uno

Pregunta
-
Chicos muy buenas como van,bueno traigo un tema realmente simple al que no le estoy encontrando la vuelta.
Estoy usando EF Core Code First y API Fluent para configurar todo,cuestion que tengo una relacion uno a uno la cual deberia ser simple pero algo no me esta cuadrando.Detallo Rapidamente para ser consizo >
1 Paciente tiene 1 Cobertura
Al momento de querer insertar un segundo registro con el mismo CoberturaId a traves de la aplicacion
Pero si quiero insertar el registro directamente en la base tambien >
Dejo el Codigo del API Fluent
Espero haber sido claro y se que puede ser un tema para tratar en SQL,pero como mi cuestion viene por EF Core quiero entenderlo bien por ahi tambien.
Miles de Gracias y perdon por la simpleza,se que es sencillo pero no me esta saliento verlo con un enfoque distinto.
Luciano Leonel
Respuestas
-
El problema viene precisamente de que has definido la relacion como "de uno a uno", pero segun el mensaje de error estas tratando de insertar un registro como si la relacion fuera "de uno a muchos". En otras palabras, estas intentando grabar un registro que tiene CoberturaId=1, pero ya existe en la tabla otro registro que tiene CoberturaId=1. Por eso te lo rechaza; si te permitiera insertarlo tendrias dos registros en la primera tabla relacionados con el mismo registro de la segunda tabla, y se violaria la relacion de 1 a 1.
Editado: Si necesitas que dos pacientes puedan tener la misma cobertura, entonces es una relacion de 1 a muchos, no de 1 a 1 (1 cobertura para muchos pacientes). Eso se configura en EF cambiando la entidad Cobertura de manera que el campo Paciente sea de tipo IEnumerable<PacienteEntity> en lugar de ser simplemente de tipo PacienteEntity (y tipicamente la propiedad se llamaria "Pacientes" en lugar de "Paciente").- Editado Alberto PoblacionMVP, Moderator miércoles, 16 de octubre de 2019 12:02
- Propuesto como respuesta Pablo RubioModerator miércoles, 16 de octubre de 2019 16:25
- Marcado como respuesta Luciano Leonel sábado, 19 de octubre de 2019 18:11
-
hola
Si tienes un FK en la tabla entonces no es una relacion uno a uno, es una relacion uno a mucho
Para que sea uno a uno en ambas tablas se relaciona por la PK
O sea, si en la tabla pacientes la PK es DNI en la tabla de cobertura la PK tambien deberia ser el DNI
Configuring One To One Relationships In Entity Framework Core
como veras en el ejemplo, en tu caso DNI mapea con CoberturaId, sino no seria una relacion uno a uno
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Pablo RubioModerator miércoles, 16 de octubre de 2019 16:25
- Marcado como respuesta Luciano Leonel sábado, 19 de octubre de 2019 18:11
Todas las respuestas
-
El problema viene precisamente de que has definido la relacion como "de uno a uno", pero segun el mensaje de error estas tratando de insertar un registro como si la relacion fuera "de uno a muchos". En otras palabras, estas intentando grabar un registro que tiene CoberturaId=1, pero ya existe en la tabla otro registro que tiene CoberturaId=1. Por eso te lo rechaza; si te permitiera insertarlo tendrias dos registros en la primera tabla relacionados con el mismo registro de la segunda tabla, y se violaria la relacion de 1 a 1.
Editado: Si necesitas que dos pacientes puedan tener la misma cobertura, entonces es una relacion de 1 a muchos, no de 1 a 1 (1 cobertura para muchos pacientes). Eso se configura en EF cambiando la entidad Cobertura de manera que el campo Paciente sea de tipo IEnumerable<PacienteEntity> en lugar de ser simplemente de tipo PacienteEntity (y tipicamente la propiedad se llamaria "Pacientes" en lugar de "Paciente").- Editado Alberto PoblacionMVP, Moderator miércoles, 16 de octubre de 2019 12:02
- Propuesto como respuesta Pablo RubioModerator miércoles, 16 de octubre de 2019 16:25
- Marcado como respuesta Luciano Leonel sábado, 19 de octubre de 2019 18:11
-
-
hola
Si tienes un FK en la tabla entonces no es una relacion uno a uno, es una relacion uno a mucho
Para que sea uno a uno en ambas tablas se relaciona por la PK
O sea, si en la tabla pacientes la PK es DNI en la tabla de cobertura la PK tambien deberia ser el DNI
Configuring One To One Relationships In Entity Framework Core
como veras en el ejemplo, en tu caso DNI mapea con CoberturaId, sino no seria una relacion uno a uno
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Pablo RubioModerator miércoles, 16 de octubre de 2019 16:25
- Marcado como respuesta Luciano Leonel sábado, 19 de octubre de 2019 18:11
-
hola
>>no hay que crear una tabla intermedia como seria una relacion de muchos a muchos no?
si tienes una relacion "uno a muchos" no es necesario la tabla intermedia
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Pablo RubioModerator miércoles, 16 de octubre de 2019 16:25
-
no hay que crear una tabla intermedia como seria una relacion de muchos a muchos no?
No, para "uno a muchos" no se necesita la tabla intermedia. Desde el punto de vista de SQL lo único que habría que hacer es quitar la restricción de unicidad sobre la columna que tiene la FK. Esto te lo hará automáticamente Entity Framework en el momento de crear las tablas si haces en las clases el cambio que te indiqué en la respuesta anterior.
- Propuesto como respuesta Pablo RubioModerator miércoles, 16 de octubre de 2019 16:25