none
Obtener registro de tabla con llave foranea usando Entity Framework en C# RRS feed

  • Pregunta

  • Hola, tengo una base de datos con estas tablas:

    Medico:                                    Especialidad:

    -nroDocumento                        -id

    -Nombre                                   -Descripcion

    -idEspecialidad

    Y una llave foranea que conecta idEspecialidad->id.

    Usando Entity Framework en Visual Studio desarrollando en C#. Como puedo crear un objeto Medico, y que obtenga directamente por la llave foranea el tipo de especialidad que tiene?.

    Esto lo hice sin usar ninguna funcion ni la llave, haciendo que me busque en la db la especialidad de "x" id dependiendo del que tiene el medico, y despues agregandoselo a la entidad Medico en C#, pero quiero saber si EF te da alguna funcion para hacer esto directamente.

    Gracias.


    miércoles, 25 de septiembre de 2019 19:38

Respuestas

  • hola

    Si usas EF entonces no debes buscar nada, ni asignarlo a otro objeto, solo mapeas la relacion y solo te traera el dato

    Configure One-to-Many Relationships in EF 6

    Relaciones

    cuando configuras el DbContext indicas la relacion poniendo las propiedades

    Despues usas el Include para que traiga la relacion al obtener el medico

    var medico = dbContext.Medicos.Include(x=>x.Especialidad)
                                  .FirstOrDefault(x=>Id = medicoId);

     asi recuperas las relaciones con EF

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 25 de septiembre de 2019 19:43
    • Marcado como respuesta Nacho Sa miércoles, 25 de septiembre de 2019 19:48
    miércoles, 25 de septiembre de 2019 19:43

Todas las respuestas

  • hola

    Si usas EF entonces no debes buscar nada, ni asignarlo a otro objeto, solo mapeas la relacion y solo te traera el dato

    Configure One-to-Many Relationships in EF 6

    Relaciones

    cuando configuras el DbContext indicas la relacion poniendo las propiedades

    Despues usas el Include para que traiga la relacion al obtener el medico

    var medico = dbContext.Medicos.Include(x=>x.Especialidad)
                                  .FirstOrDefault(x=>Id = medicoId);

     asi recuperas las relaciones con EF

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP miércoles, 25 de septiembre de 2019 19:43
    • Marcado como respuesta Nacho Sa miércoles, 25 de septiembre de 2019 19:48
    miércoles, 25 de septiembre de 2019 19:43
  • Esto se puede hacer usando Database First? Porque leyendo el primer articulo que pasate usa CodeFirst
    miércoles, 25 de septiembre de 2019 19:49
  • hola

    >>Esto se puede hacer usando Database First?

    si, pero debes crear la relacion en la db y al genera el edmx que traiga esta en el modelo visual

    Personalmente no recomiendo usas Database First, pierdes el control, ademas que en versiones mas actuales de EF Core ya no se utiliza

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 25 de septiembre de 2019 19:52
  • Hola Leandro, trate de usar el Include usando DB First para probar. Cree la relacion en la db, actualize el modelo y en la parte visual si se ve esta relacion, pero cuando trato de usar

    var medico = db.Medicos.Include(x => x.Especialidad).ToList();Me da error en x => x.Especialidad y dice "No se puede convertir expresion lambda en el tipo 'string' porque no es un tipo delegado'.

    Por que puede ser eso?

    jueves, 26 de septiembre de 2019 13:54