J'ai également installé le projet de base .net et le contexte de base de données. Mais je ne peux pas encore utiliser dbContext à cause de cette erreur.
"il n'y a aucun argument donné qui correspond au paramètre formel requis 'options'"
Manette:
public IActionResult Index()
{
using (var db = new BlexzWebDb())
{
}
return View();
}
Code DbContext:
public class BlexzWebDb : DbContext
{
public BlexzWebDb(DbContextOptions<BlexzWebDb> options)
: base(options)
{ }
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<AssignedRole> AssignedRoles { get; set; }
}
image d'erreur jointe. Quelle est la solution possible à ce problème? Merci d'avance
Dans EF Core, il est courant de transmettre certaines options DbContextOptions au constructeur.
Donc en général, un constructeur ressemble à ceci:
public BlexzWebDb(DbContextOptions<BlexzWebDb> options) : base(options)
Comme vous pouvez le constater, il n'y a pas de surcharge valide sous la forme d'un constructeur sans paramètre:
Ainsi, cela ne fonctionne pas:
using (var db = new BlexzWebDb())
Au lieu de cela
Exemple: quelque part, vous enregistrerez votre dbcontext, (Startup.cs):
//typical configuration part of .net core
public void ConfigureServices(IServiceCollection services)
{
//some mvc
services.AddMvc();
//hey, options!
services.AddDbContextPool<BlexzWebDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlexzWebConnection")));
//...etc
Maintenant que la partie enregistrement est terminée, vous pouvez extraire votre contexte du framework. Exemple: inversion du contrôle via un constructeur dans votre contrôleur:
public class SomeController : Controller
{
private readonly BlexzWebDb _db;
//the framework handles this
public SomeController(BlexzWebDb db)
{
_db = db;
}
//etc.
De nos jours, la méthode préférée pour ajouter un DbContext à la collection de services consiste à utiliser la méthode AddDbContextPool
:
//hey, options!
//hey, DbContextPool
services.AddDbContextPool<BlexzWebDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlexzWebConnection")));
//etc
pour plus d'informations, voir msdn
var connectionstring = "Connection string";
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseSqlServer(connectionstring);
ApplicationDbContext dbContext = new ApplicationDbContext(optionsBuilder.Options);
En plus de la réponse de @ Stefan, il existe un autre moyen d'y parvenir. Vous pouvez définir une chaîne de connexion à la base de données dans la méthode OnConfiguring de la classe DbContext sans ajouter le service DbContext dans startup.cs.
Setting.cs
public static class Setting
{
public static string ConnectionString { get; set; }
}
Startup.cs
Setting.ConnectionString = Configuration.GetSection("ConnectionStrings:BlexzDbConnection").Value;
BlexzWebDb.cs
public class BlexzWebDb : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(Setting.ConnectionString);
}
}
}
HomeController.cs
public class HomeController : Controller
{
private readonly BlexzWebDb db;
public HomeController()
{
this.db = new BlexzWebDb();
}
//etc.