domingo, 2 de noviembre de 2014

[Entity Framework] Code First - Fluent Api

 

En el video explico como por medio de código se define el mapping de las entidades pudiendo especificar: clave principal, tipos y precisión en los datos, relaciones entre entidades, herencia, etc.

Por medio de código podrán redefinir las relaciones cuando estas no siguen las convenciones.

 

 

Link


image

31 comentarios:









  1. A que se debe este Error, como se soluciona??



    Aclaro que en otros webforms, función bien...


    Espero su respuesta, gracias, disculpe, abrazos......

    ResponderEliminar
  2. Hola Leandro, espero que haya pasado bien estas fiestas, lo molesto para consultarle sobre un Error que me surge cuando opero lo que hay en webform:

    The ConnectionString property has not been initialized.


    El que sigue a continuación, es el código del connectionString del web.config:









    Cual seria la solución a este problema, ya que conozco el origen???

    Le agradezco mucho su respuesta, Disculpe las molestias, y gracias....

    ResponderEliminar
  3. Este es el código del web.config que no se publico anteriormente, para que se consulte, con la finalidad de hallar respuesta a esta consulta:




    ResponderEliminar
  4. No se publica el Codigo de web.config, disculpe...

    ResponderEliminar
  5. Me paso al Foro de c#

    ResponderEliminar
  6. hola Guillermo

    usas EF Code First o tienes un edmx ?
    lo pregunto porque en el web.config deberias tener la key que defines en contexto

    saludos

    ResponderEliminar
  7. Como le va, disculpe que lo moleste, pero debo llenar un GridViewMateria con Id_Materia y Nombre de la Materia de la Tabla Materias, de acuerdo con el Curso seleccionado en un GridViewCurso anterior..............La única relación entre el Curso seleccionado y el Nombre e Id_Materia de la Materia de la Tabla Materias es la Tabla CursosMaterias, a la cual supongo debo apelar para filtrar el Nombre de la Materia y su Id_Materia por de acuerdo al Curso seleccionado......Tengo un SELECT con INNER JOIN para Igualar el Id_Materia de la Tabla Materia y el id_Materia de la Tabla CursosMaterias a los fines de que este ultimo id_Materia sea de acuerdo al id_Curso seleccionado en el GridCurso, por consiguiente, el Id_Materia y el Nombre de la Materia de la Tabla Materias, será filtrado con el Curso seleccionado de la Tabla CursosMaterias.............(Espero que este bien todo).......
    ....(Utilizo ViewState a los fines de captar el Id_Curso del GridCurso)........

    Quedaria lo siguiente:



    protected void GridCursos_SelectedIndexChanged(object sender, EventArgs e)
    {
    // Se obtiene la fila seleccionada del gridview

    GridViewRow row = GridCursos.SelectedRow;

    // Obtengo el id de la entidad que se esta editando
    // en este caso de la entidad Curso

    ViewState["idCurso"] = Convert.ToInt32(GridCursos.DataKeys[row.RowIndex].Value);


    // Aquí lleno el GridInscMaterias

    AccesoLogicaCursoMateria b = new AccesoLogicaCursoMateria();
    GridInscMaterias.DataSource = b.fillGridView("SELECT Id_Materia, Nombre FROM Materias INNER JOIN CursosMaterias ON id_Materia.CursosMaterias = Id_Materia.Materias Where id_Curso.CursosMaterias =" + ViewState["idCurso"]);
    GridInscMaterias.DataBind();

    }

    La cuestión es que asi no se esta llenando el GridInscMaterias, y quedaría ver si Ud. logra visualizar el error en este procedimiento y aportar la solución, u otra forma de hacerlo, también, cual seria es forma.....

    Desde ya quedo muy agradecido a Ud..................Espero su devolucion, nos vemos..

    ResponderEliminar
  8. hola Guillermo

    el primer error que visualizo es que no usas parametros
    ese metodo fillGridView() deberias cambiarlo para que no tengas que concatener un valor en un string

    usa siempre parametros

    por este medio es complicado visualizar codigo, quizas sea mejor seguir el tema en el foro c#

    saludos

    ResponderEliminar
  9. Como le va Leandro, en el Foro de c#, le hago una consulta con el tema:

    No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla 'Alumno'.

    Disculpe que lo moleste, estare siempre agradecido, nos vemos....

    ResponderEliminar
  10. hola Guillermo

    tienes el link de la pregunta en el foro?

    si la relacion entre las entidades es obligatoria entonces vas a tener que definir el id o instancia del alumno

    saludos

    ResponderEliminar
  11. Como le va Leandro, en el Foro de c#, le hago una consulta con el tema:

    No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla 'Alumno'.

    Disculpe que lo moleste, estare siempre agradecido, nos vemos....

    ResponderEliminar
  12. Hola, Leandro, aquí va el Link:

    https://social.msdn.microsoft.com/Forums/es-ES/f176ff1b-dd53-4260-a484-47a522c68ced/no-se-puede-agregar-o-cambiar-el-registro-porque-se-necesita-un-registro-relacionado-en-la-tabla?forum=webdeves

    Gracias, disculpe las molestias.....

    ResponderEliminar
  13. Como le va Leandro, en el post este inmediato anterior, le dejo el Link que Ud. me solicito.........disculpe, saludos...

    ResponderEliminar
  14. Hola, Leandro, le consulto si con este codigo lleno una columna de un GridView con el dato de un TextBox que alberga el valor de un Calendar....a continuacion:

    DataTable data = new DataTable();
    data.Columns.Add("Fecha");

    DataRow row = data.NewRow();
    row["Fecha"] = TextCalendar.Text;
    data.Rows.Add(row);

    GridCargaNota.DataSource = data; //aqui hay query ver si va DataBind();
    //GridCargaNota.DataBind();

    La consulta es si corresponde que vaya GridCargaNota.DataBind();, o que, dado que no me carga esa columna con ese dato de Calendar....(todo esto lo coloco despues del Select y los paremetros y ExecuteScalar(), y Grid.DataSource y DataBind();)

    Que debiera ir para que efectivamente me llene esa columna del Grid donde va ello??,

    Gracias, disculpe las molestias. Saludos....

    ResponderEliminar
    Respuestas
    1. hola
      si estas desarrollando en asp.net siempre va el DataBind() para que se genere el render del control con los datos que asignes
      no entendi lo del ExecuteScalar() si es un select este devolveria un solo valor, porque no usaste un DataAdapter y cargas con el Fill() directamente el datatable?
      saludos

      Eliminar
  15. Gracias, Leandro, guiame en esta:

    puse ese DataBind() asi:



    cnn.Open();

    string query = @"SELECT N.Dni, N.Nombre, N.Apellido, N.id_alumMatCurso
    FROM (Notas N INNER JOIN AlumMatCursos amc ON amc.id_alumMatCurso = N.id_alumMatCurso)
    INNER JOIN CursosMaterias CM On amc.id_cursoMateria = CM.id_cursoMateria
    WHERE (CM.id_Curso = @idCurso) AND (CM.id_Materia = @idMateria)";
    OleDbCommand com = new OleDbCommand(query, cnn);

    com.Parameters.AddWithValue("@idCurso", Convert.ToInt32(ViewState["idCurso"]));
    com.Parameters.AddWithValue("@idMateria", Convert.ToInt32(ViewState["idMateria"])); //Controlar que cargue lo que corresponde

    OleDbDataAdapter da = new OleDbDataAdapter(com);
    DataTable dt = new DataTable();
    da.Fill(dt);
    GridCargaNota.DataSource = dt;
    GridCargaNota.DataBind();

    DataTable data = new DataTable();
    data.Columns.Add("Fecha");

    DataRow row = data.NewRow();
    row["Fecha"] = TextCalendar.Text;
    data.Rows.Add(row);

    GridCargaNota.DataSource = data;
    GridCargaNota.DataBind();


    Esta puesto 2 veces el DataBind(); uno para llenar el GridView, y otro para llenar la Columna independiente....

    Esta Bien??, porque me da error que no reconoce el campo Dni del Select.....

    Abrazo, Leandro, nos vemos...

    ResponderEliminar
    Respuestas
    1. hola
      Pero alli solo estas agregando el dato de la fecha a la ultima row, no al resto que se genera cuando realizas el Fill()
      podrias ser algo como

      OleDbDataAdapter da = new OleDbDataAdapter(com);
      DataTable dt = new DataTable();
      da.Fill(dt);

      dt.Columns.Add("Fecha");

      foreach(DataRow row in dt.Rows){
      row["Fecha"] = TextCalendar.Text;
      }

      GridCargaNota.DataSource = dt;
      GridCargaNota.DataBind();

      saludos

      Eliminar
    2. Guiame, Leandro, no me lo agrega al campo Fercha del GridView......saludos...

      Eliminar
  16. Gracias, Leandro, si me llenos los campos de Grid view con la fecha elegida, te enviare un regalo electronico uno de estos dia, saludos

    ResponderEliminar
  17. Hola, Leandro, como podría establecer una llave primaria compuesta a una clase heredada

    gracias

    ResponderEliminar
    Respuestas
    1. hola
      Si estas aplicando herencia la key es una sola y la define la clase base.
      Ademas no es muy aconsejable definir claves compuestas cuando usas un ORM, cual es la situacion por la cual necesitas claves compuestas y ademas en un modelo de herencia?
      saludos

      Eliminar
  18. Hola, Leandro, lo molesto para consultarle si sabe como poner en edicion masiva un GridView, es decir, no se si es con un solo boton que edita todas las filas del Grid, o como es, o si tiene un link donde ver eso y aprender......Espero su repsuesta favorable, gracias, saludos....

    ResponderEliminar
  19. Hola, Leandro, se puede hacer, que al aparecer la Grilla, se presenten los controles que aparecen cuando se edita, a la vista??..........Saludos

    ResponderEliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  22. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  23. Hola, Leandro, disculpe que lo moleste, estoy consultando en foro c#, en las trabas de mi Proyecto ultimamente dado que rindo en Diciembre, y temo quedarme sin timepo, debo terminar cuanto antes para hacer revisiones, etc.....Le pido disculpas que me vea seguido por alli, por ello solicito ayuda para resolver.....y tambien quiero preguntar si hay limite de posteos por dia en le foro...... Disculpe las molestias, gracias....

    ResponderEliminar