Inyección de dependencia con Entity Framework Core
ASP.NET Core tiene una excelente función de Inyección de dependencia a través de la cual este marco le proporciona un objeto de cualquier clase que desee. Por lo tanto, no tiene que crear manualmente el objeto de clase en su código.
En este tutorial te enseñaré a usar el método de Inyección de Dependencia en Entity Framework Core . Esto le permitirá obtener los siguientes beneficios:
1. El objeto de la clase 'DbContext' a través de la inyección de dependencia.
2. Obtenga la cadena de conexión de 'appsettings.json' en lugar del método 'OnConfiguring()' de la clase 'DbContext'.
Normalmente, proporciona la cadena de conexión de su base de datos en el método OnConfiguring()
de la clase DbContext
de esta manera:
invalidación protegida void OnConfiguring(DbContextOptionsBuilder optionsBuilder){if (!optionsBuilder.IsConfigured){optionsBuilder.UseSqlServer(@"Server=Smile;Database=Shop;Trusted_Connection=True;");
}
}
Este enfoque no es bueno ya que es mejor almacenar la cadena de conexión en el archivo appsettings.json
. Después de aplicar la inyección de dependencia en Entity Framework Core , simplemente puede eliminar todo dentro del método OnConfiguring()
de esta manera:
invalidación protegida void OnConfiguring(DbContextOptionsBuilder optionsBuilder){if (!optionsBuilder.IsConfigured){}}
Debe hacer los siguientes 3 cambios como se describe a continuación:
El código para el archivo appsettings.json
que almacena el valor de la cadena de conexión de la base de datos se proporciona a continuación:
{"ConnectionStrings": {"DefaultConnection": "Server=Smile;Database=Shop;Trusted_Connection=True;"}}
En su clase DbContext
, vaya y agregue el constructor que hereda la clase base. También elimine la cadena de conexión del método OnConfiguring()
. El código de la clase DbContex
debería ser:
public class ShopContext : DbContext{public ShopContext(DbContextOptions<ShopContext> options) : base(options) { }public DbSet<Products> Products { get; establecer; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { }
}
Cambie la clase Startup.cs
para obtener el objeto IConfiguration
del espacio de nombres Microsoft.Extensions.Configuration
en su Constructor.
Dentro del constructor, establezca el valor de una propiedad pública de tipo IConfiguration
con el valor del objeto IConfiguration
dado en su parámetro.
El código para esto es:
Public Startup(IConfiguration configuración){Configuración = configuración;}
Configuración pública de IConfiguration { get; }
Este cambio lo ayudará a leer el archivo appsettings.json
en la clase Startup.cs
.
A continuación, agregue la clase DbContext
como un servicio dentro del método ConfigureService()
. Vea el siguiente código:
services.AddDbContext<ShopContext>(opciones => opciones.UseSqlServer(Configuración["ConnectionStrings:DefaultConnection"]));
El código actualizado de la clase Startup debe ser:
inicio de clase pública {inicio público (configuración de IConfiguration) {Configuración = configuración;}
public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ShopContext>(options => options.UseSqlServer(Configuration\["ConnectionStrings:DefaultConnection"\])); services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles(); app.UseDeveloperExceptionPage(); app.UseMvc(routes => { routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
}
Obtenga el objeto DbContext en el controlador usando la inyección de dependencia
Ahora está listo y permítame mostrarle cómo obtener el objeto de la clase DbContext
en el Constructor mediante Inyección de dependencia . Todo lo que tiene que hacer es agregar el objeto de clase DbContext
en el constructor del controlador y establecerle un valor de propiedad pública.
Puede aprender todo sobre la función Inyección de dependencias en este tutorial: Inyección de dependencias en ASP.NET Core
Agrega el siguiente código al Constructor:
ShopContext privado shopContext;
Controlador de inicio público (Contexto de tienda sc){Contexto de tienda = sc;}
Ahora está listo para usar Entity Framework Core para comunicarse con la base de datos.
Para leer registros de la base de datos:
shopContext.Teacher;
Para crear registros en la base de datos:
shopContext.Products.Add(producto);shopContext.SaveChanges();
Consulte el código actualizado del controlador que también enumera los métodos de acción que lee e inserta registros.
clase pública HomeController : Controlador{private ShopContext shopContext;public HomeController(ShopContext sc){shopContext = sc;}
public IActionResult Index() { return View(shopContext.Teacher); } public IActionResult Create() { return View(); } \[HttpPost\] public IActionResult Create\_Post(Products product) { if (ModelState.IsValid) { shopContext.Products.Add(product); shopContext.SaveChanges(); return RedirectToAction("Index"); } else return View(); }
}
Conclusión
Espero que les guste este tutorial sobre Entity Framework Core con Dependency Injection . Es solo un paso para mejorar su código. Si te gusta este tutorial, dame algunos aplausos y sígueme para 1 tutorial sobre desarrollo web cada semana.
Consulte también mi otro artículo en HACKERNOON: 7 problemas comunes de desarrollo web que todos los desarrolladores, desde principiantes hasta expertos, deben conocer [con múltiples soluciones]