web-dev-qa-db-fra.com

AddDbContext a été appelé avec configuration, mais le type de contexte 'MyContext' ne déclare qu'un constructeur sans paramètre?

Dans l’application de console suivante (.Net core 2.0), le scaffold-dbcontext A créé le DbContext suivant.

public partial class MyContext : DbContext
{
    public virtual DbSet<Tables> Tables { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer(Program.Conn); }
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder) { .... }
}

Dans le Main () (static void Main(string[] args)), le code suivant

var services = new ServiceCollection();
var conn = configuration.GetConnectionString("MySource");
services.AddDbContext<MyContext>(o => o.UseSqlServer(conn)); // Error

vous avez l'erreur d'exécution suivante?

AddDbContext a été appelé avec configuration, mais le type de contexte 'MyContext' ne déclare qu'un constructeur sans paramètre. Cela signifie que la configuration transmise à AddDbContext ne sera jamais utilisée

30
ca9163d9

Comme le dit l'erreur si vous configurez votre MyContext à AddDbContext, vous devez également ajouter un constructeur qui reçoit un paramètre de type DbContextOptions<MyContext> dans votre classe MyContext comme ci-dessous

public MyContext(DbContextOptions<MyContext> options)
    : base(options)
{ }

Si vous ne le faites pas, ASP.Net Core ne pourra pas injecter la configuration que vous avez définie avec AddDbContext.

56
CodeNotFound