none
¿Cómo trabajar con una base de datos existente en entityframework? RRS feed

  • Question

  • tengo una consulta y es la siguiente:

    Tengo un proyecto con EntityFramework, pero ha sido trabajado con code first y tiene su clase contextmigrationsentidadesrepository e interfaces. El problema es que necesito trabajar con otra base de datos existente y al crear mi context y mis entidades se generan en la base de datos como tablas y yo no quiero eso porque ya existen esas tablas.Simplemente deseo crear mis repositorios e interfaces y demás y usar las tablas existentes.

    Web.Config

    <add name="ContenedoresContext" connectionString="data source=xxx;
           initial catalog=xxx; Integrated Security=True;"
           providerName="System.Data.SqlClient" />

    Código Context

    public class ContenedoresContext:DbContext
        {
            public DbSet<Ruma> rumas { get; set; }
        }

    Entidad Ruma

    public class Ruma
        {
            public int codRuma { get; set; }
            public string nomRuma { get; set; }
            public int estado { get; set; }
        }

    Interfaz

    public interface IRumaRepository:IGenericRepository<Ruma>
        {
            IQueryable<Ruma> ListarRumasActivas();
            void EliminarActivos();
        }

    Clase implementa la interfaz

    public class RumaRepository:GenericRepository<Ruma,ContenedoresContext>,IRumaRepository
        {
            private DbContext _db = null;
            public RumaRepository(DbContext contexto) : base(contexto)
            {
                _db = contexto as DbContext;
            }
    
    
            public IQueryable<Ruma> ListarRumasActivas()
            {
                return this._db.Set<Ruma>();
            }
        }

    Mi controlador


    public JsonResult listaTotalRuma()
            {
                var listado = _repo.ListarRumasActivas();
                var resultado = Json(new { data = listado }, JsonRequestBehavior.AllowGet);
                resultado.MaxJsonLength = int.MaxValue;
                return resultado;
            }

     Necesito usar las tablas existentes para las operaciones crud y no crearlas desde codefirst ya que ya existen.Además de ello no se si es lo correcto la forma como estoy trabajandolo. ya que el proyecto que estoy revisando lo esta trabajando con code first.

    Thursday, April 2, 2020 2:36 AM

All replies

  • Si la base de datos ya existe y quieres usarla, entonces lo más oportuno es usar database-first en lugar de code-first.

    Con el database-first, apuntas el asistente a la base de datos que ya existe, y te genera una serie de clases que tienen los mismos campos que las tablas de la base de datos (contrariamente al code-first en el que escribes las clases y entonces te genera en la base de datos unas tablas con la misma estructura que tus claes). De esta manera no te crea nada en la base de datos sino que usa lo que ya hay en ella.

    Thursday, April 2, 2020 7:50 AM
    Moderator
  • hola

    Existen diferentes Initializers que puedes configurar para que no aplique cambios sobre la db existen

    Database Initialization Strategies in EF 6 Code-First

    Para inhabilitarlo asigna un null en Database.SetInitializer<>()

    public class ContenedoresContext : DbContext
    {
        public ContenedoresContext() : base("ContenedoresContext")
        {            
            Database.SetInitializer<ContenedoresContext>(null);
        }
    
        public DbSet<Ruma> rumas { get; set; }
    }

    Si necesitas mapear el nombre de la tabla

    Entity Mappings using Fluent API in EF 6

    utiliza el ToTable() en OnModelCreating

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Thursday, April 2, 2020 12:43 PM
  • hola Alberto

    >>entonces lo más oportuno es usar database-first en lugar de code-first.

    porque? se puede mapear con code first una db existente indicando que no debe crearla

    Code First a una base de datos existente

    Cuando indicas database-first te refieres a usar un edmx ? porque por ahi entendi mal y te referias a mapear usando codigo solo que partiendo de una db que defina la estructura

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    Thursday, April 2, 2020 12:48 PM
  • Hola , 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

     

    Espero su respuesta. 

      

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

      

    Oscar Navarro

      

     ____ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.   

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.    

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    Monday, April 6, 2020 4:46 PM
    Moderator