none
Entity Framework. Crear el modelo en base a un modelo de Clases RRS feed

  • Pregunta

  • Hola a todos, estoy empezando con Entity Framework 4. La cuestion es la siguiente, si yo ya tengo hecho el modelo de clases, es mas, el sistema anda perfectamente, ahora quiero usar el EF para generar las tablas y usar este modelo para hacer las conexiones. Por lo que estuve viendo esto no es posible, las opciones disponibles son Empezar desde una BD ya hecha, o empezar un modelo desde 0.  O sea, que no existan las clases definidas. 

    Empezar desde desde un modelo de Clases ya hecho no es posible?

     

    Siguiendo con mi pregunta, si yo a mi modelo YA hecho le agrego un modelo de EF, y a este le agrego una entidad con el mismo nombre que una entidad que ya tengo, la entidad Existente  pasa a heredar de la del modelo  del EF los campos que yo agregue, pero me genera un error en el construcotor de la clase, ya que el EF aparentemente genera constructores con sin parametros, y yo tengo muchos constructores de mis clases con parametros. Como  podria resolver este problema?

    Saludos a todos y espero alguien pudiera ayudarme.

     

    miércoles, 19 de mayo de 2010 23:17

Todas las respuestas

  • Hola, primero decirte que creo que la forma más fácil sería crear las entidades en Entity Framework y luego aplicar tus reglas de negocio extendiendo las entidades con clases parciales. 

    Pero si ya tienes todas las entidades montadas y sería complejo hacer lo que te digo anteriormente, puedes hacer que Entity Framework use tus clases ya creadas como entidades. Para esto echa un vistazo aqui http://msdn.microsoft.com/es-es/library/dd456853.aspx tienes mucha información sobre como hacerlo.


    Un saludo. Miguel A. González _________________________ No olvides marcar este post como útil si te ha sido de ayuda

    • Marcado como respuesta NioDeTark lunes, 9 de abril de 2012 13:03
    • Desmarcado como respuesta NioDeTark martes, 14 de agosto de 2012 22:53
    lunes, 9 de abril de 2012 10:49
  • Buenas, gracias por responder Miguel, pero la respuesta ha llegado un poco tarde no?! el post es del 2010! Igualmente te comento que es un tema que nunca resolvi, ya que nadie respondio!, tuve que armarme de paciencia y tiempo y migrar todo el proyecto a uno de EF! Fue un dolor de cabeza pero lo logre. Actualemten no tengo tiempo como para aprender a utilizar las entidaddes POCO pero es una materia pendiente, cuando maneje un poquito mejor el tema de EF seguro que lo agarrare!

    En fin, muchas gracias por tu respuesta! Saludos!

    lunes, 9 de abril de 2012 13:02
  • Hola,

    Empezar desde desde un modelo de Clases ya hecho no es posible?

    Totalmente es más yo pensaría en utilizar CodeFirst, puesto que tu ya tienes tus clases creadas, este se encargará de crear tu bb.dd o bien utilizar una ya existente.

    Respecto a esto.

    Siguiendo con mi pregunta, si yo a mi modelo YA hecho le agrego un modelo de EF, y a este le agrego una entidad con el mismo nombre que una entidad que ya tengo, la entidad Existente  pasa a heredar de la del modelo  del EF los campos que yo agregue, pero me genera un error en el construcotor de la clase, ya que el EF aparentemente genera constructores con sin parametros, y yo tengo muchos constructores de mis clases con parametros. Como  podria resolver este problema?

    Como bien dices EF necesita un contructor sin parametros pero esto es lo único que tendrías que hacer crear en todas tus clases un constructor sin parametros.

    public Context:DbContext
    {
      public DbSet<TuEntidad> TuEntidad{get;set;}
    }

    Mira este link, que te puede ayudar.

    http://www.comunidadesdeusuarios.net/cursos/ef4-120.aspx 

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    • Marcado como respuesta NioDeTark lunes, 9 de abril de 2012 13:47
    • Desmarcado como respuesta NioDeTark martes, 14 de agosto de 2012 22:53
    lunes, 9 de abril de 2012 13:07
  • Hola Pedro, gracias por tu respuesta, realmente me parece muy interesante lo que me dices, te pediria que me expliques un poco mas lo de los constructores porque yo trabajo en VB y no entiendo lo que estariamos haciendo en esas lineas que me pusiste.

    El link pareceria ser muy bueno, cuando tenga un poco de tiempo lo mirare con mas detenimiento! 

    Por ultimo, podria coexistir un modelo EF con un modelo "normal", de manera de poder ir migrando "por partes" una solucion a EF!? Te explico, hoy por hoy tengo una solucion muy grandre que me gustaria pasar a EF, pero no puedo parar el sistema xq ya esta funcionando.... esto que te digo es posible!?

    Gracias por su respuesta, saludos1

    lunes, 9 de abril de 2012 13:47
  • Perdona, lo vi sin responder y no me di cuenta de la fecha del post.

    Un saludo. Miguel A. González _________________________ No olvides marcar este post como útil si te ha sido de ayuda

    lunes, 9 de abril de 2012 13:55
  • Hola,

    el código que te pone Pedro en VB.NET sería algo así

    public Context 
      Inhertis DbContext
    {
      Public Property TuEntidad() As DbSet(Of TuEntidad) 
    }
    Respecto a tener un modelo mixto (modelo normal y EF) es totalmente factible, y te costará más o menos dependiendo de lo separado que tengas tu modelo de negocio de tu acceso a datos.


    Atentamente, Sergio.

    Blog
    Twitter

    lunes, 9 de abril de 2012 13:57
  • Hola, perdon por la demora, pero basicamente tampoco entendi, donde pongo eso para que funcionen los constructores con parametro  (ademas me interesaría anular o que sean privados los constructores sin parametros)?

    Yo lo trabaje de la siguiente manera: 

    Por cada clase del EF, cree una otra clase parcial, en la que agregue una funcion "Nuevo" en vez de new, basicamente simula el constructor, donde le paso los parametros , y previa creación de la clase le asigno los valores que obtuve 

    Partial Public Class Envio
    
        Shared Function nuevo(ByVal cantidad As Int16,
                              ByVal herr As Herramienta,
                              ByVal obraOrigen As Obra,
                              ByVal obraDestino As Obra,
                              ByVal responsableEnvio As String,
                              ByVal fechaEnvio As Date) As Envio
            If cantidad < 1 Then Throw New DalcoExcepcion("La cantidad debe ser mayor a 0.", Nothing)
            If herr.encontrarEstadoDisponibles.Cantidad < cantidad Then
                Throw New DalcoExcepcion(
                            String.Format("La cantidad solicitada para la herramienta {0} sobrepasa a la disponible",
                                          herr.nombre),
                            herr)
            End If
            If herr.Obra.Equals(obraDestino) Then Throw New DalcoExcepcion("El destino debe ser diferente del origen", herr)
            herr.Enviar(cantidad, obraDestino)
            Dim env As Envio = CreateEnvio(0,
                                           cantidad,
                                           herr.idHerramienta,
                                           responsableEnvio,
                                           fechaEnvio,
                                           obraOrigen.idObra,
                                           obraDestino.idObra)
            env.Herramienta = herr
            env.Destino = obraDestino
            env.Origen = obraOrigen
            'Dim le As LineaEnvio = CreateLineaEnvio(0, env.id, cantidad)
    
            Return env
        End Function

    Que les parece como lo solucione!? tienen alguna idea mejor!? 

    Muchas gracias por todo!

    viernes, 13 de abril de 2012 14:33