2017-03-29 163 views
-1

我第一次使用EF核心代碼與Autofac DI一個窗口服務,當我運行Add-遷移TestDD1InitialMigration我得到不能使用EF核心遷移

No parameterless constructor was found on 'ClientsContext'. Either add a parameterless constructor to 'ClientsContext' or add an implementation of 'IDbContextFactory<ClientsContext>' in the same assembly as 'ClientsContext'. 

錯誤我怎樣才能避免這個錯誤?

在此先感謝

+1

您是否嘗試瞭解錯誤的建議?這似乎是最直接的事情要做。 – mason

+0

請參閱http://benjii.me/2016/05/dotnet-ef-migrations-for-asp-net-core/ point 3 – Milen

+0

@mike如果我嘗試建議我需要將connectionstring添加爲硬編碼。這是你需要避免 – pantonis

回答

3

你需要一個上下文工廠因此EF核心可以爲遷移創建的DbContext:

public class MyDbContextFactory : IDbContextFactory<MyDbContext> 
{ 
    private IConfigurationRoot _configuration; 

    public MyDbContextFactory() 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(System.AppContext.BaseDirectory) 
      .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); 

     _configuration = builder.Build(); 
    } 

    public MyDbContext Create() 
    { 
     var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>(); 
     optionsBuilder.UseSqlServer(_configuration.GetConnectionString("DefaultConnection"), m => { m.EnableRetryOnFailure(); }); 

     return new MyDbContext(optionsBuilder.Options); 
    } 
} 

而一個appsettings.json文件,你把你的連接字符串:

{ 
    "ConnectionStrings": { 
     "DefaultConnection": "<your_connection_string>" 
    } 
} 
+0

謝謝。那就是訣竅。只有更改是創建方法簽名是不同的 – pantonis

+0

創建(DbContextFactoryOptions選項) – pantonis