Entity Framework Core Tutorial Base de datos primero
En el artículo anterior, hemos visto las migraciones para crear una base de datos desde un DbContext y clases. También es posible aplicar ingeniería inversa a una base de datos existente en un DbContext y clases, y se conoce como el enfoque de Base de Datos Primero .
- Tenemos una base de datos simple creada en el artículo anterior, y contiene dos tablas,
Order
yOrderDetail
. - Para crear un DbContext y clases a partir de la base de datos existente, ejecutaremos el comando
Scaffold-DbContext
en la consola de Package Manager.
Vamos a crear un nuevo proyecto vacío y agregar todos los paquetes necesarios para el núcleo de EF, que se explica en el enfoque de Código Primero .

Ahora necesitamos ejecutar el comando scaffold-dbcontext
con solo los parámetros requeridos.
PM> Scaffold-DbContext -Provider Microsoft.EntityFrameworkCore.SqlServer -Connection "Data Source=(localdb)\ProjectsV13;Initial Catalog=StoreDB;"
El proveedor y los parámetros de conexión son necesarios, el proveedor es Microsoft.EntityFrameworkCore.SqlServer y la conexión es la cadena de conexión para nuestra base de datos heredada.
Cuando ejecuta este comando, se agregan un montón de nuevos archivos en el Explorador de soluciones.

Ahora veamos la nueva clase DbContext.
public partial class StoreDBContext : DbContext { public virtual DbSet<OrderDetails> OrderDetails { get; set; } public virtual DbSet<Orders> Orders { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. optionsBuilder.UseSqlServer(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=StoreDB;"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<OrderDetails>(entity => { entity.HasKey(e => e.OrderDetailId); entity.HasIndex(e => e.OrderId); entity.Property(e => e.OrderDetailId).HasColumnName("OrderDetailID"); entity.Property(e => e.OrderId).HasColumnName("OrderID"); entity.Property(e => e.ProductId).HasColumnName("ProductID"); entity.HasOne(d => d.Order) .WithMany(p => p.OrderDetails) .HasForeignKey(d => d.OrderId); }); modelBuilder.Entity<Orders>(entity => { entity.HasKey(e => e.OrderId); entity.Property(e => e.OrderId).HasColumnName("OrderID"); entity.Property(e => e.CustomerId).HasColumnName("CustomerID"); entity.Property(e => e.EmployeeId).HasColumnName("EmployeeID"); }); } }
- Puede ver que las propiedades de DbSet se crean para cada una de las clases de Entidad.
- También coloca la cadena de conexión directamente en el método OnConfiguring con una nota de que es posible que no lo desee por razones de seguridad.
- También hay un montón de asignaciones fluidas explícitas para los índices y la relación, etc.