有3個程序集的解決方案:數據,域和Web。數據保存上下文,Web是一個.NET Core WebAPI應用程序,它們都在同一個解決方案目錄中。我也使用Postgre作爲數據庫。沒有數據庫上下文提供程序已配置爲此DbContext ...雖然它有
這裏是我的ConfigureServices
方法Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
string connectionString = Configuration.GetConnectionString("DefaultConnection");
...
services.AddDbContext<WebStoreContext>(
options => options.UseNpgsql(
connectionString,
(providerOptions) =>
{
providerOptions.CommandTimeout(20);
providerOptions.MigrationsAssembly("WebStore.Data");
}));
services.AddMvc();
...
}
注意如何數據庫提供商已使用AddDbContext
並傳遞optionsAction
參數配置。
現在我已經使用命令行ef工具爲db創建了初始遷移。 我有CD-ED成WebStore.Data就跑:
dotnet ef --startup-project ..\WebStore.Web migrations add IntializeDb
這一切都很好。
問題始於當我嘗試從同一目錄下,運行:
dotnet ef database update
無參數的構造函數是在 'WebStoreContext' 找到。可以在'WebStoreContext'中添加一個無參數構造函數,或者在與'WebStoreContext'相同的程序集中添加一個'IDbContextFactory'實現。
上述錯誤,我得到之前,我在我的DbContext派生類中聲明無參數的構造函數,下面的錯誤後,我宣佈一個:
沒有數據庫提供商已經配置了這個的DbContext。可以通過重寫DbContext.OnConfiguring方法或使用應用程序服務提供者上的AddDbContext來配置提供程序。如果使用AddDbContext,則還要確保您的DbContext類型在其構造函數中接受DbContextOptions對象,並將其傳遞給DbContext的基礎構造函數。
所以在我看來,儘管我提供了一個DbContextOptions實例,但無參構造函數一直在調用。
於是我嘗試這樣做:
//parameterless constructor calling the one accepting the DbContextOptions argument
public WebStoreContext() : this(new DbContextOptionsBuilder<WebStoreContext>()
.UseNpgsql("UserID=****;Password=****;Host=localhost;Port=****;Database=webstore;Pooling=true;")
.Options){ }
,並得到這個:
System.Reflection.TargetInvocationException:異常已通過調用的目標引發異常。 ---> System.IO.FileLoadException:無法加載文件或程序集「System.Diagnostics.DiagnosticSource,Version = 4.0.1.1,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51」。定位的程序集清單定義與程序集引用不匹配。 (異常來自HRESULT:0x80131040)
仍在試圖弄清楚是怎麼回事。幫助將不勝感激。
編輯: 我申請吉文Rojansky的解決方案,它的工作,雖然我有以下問題:
System.IO.FileLoadException:無法加載文件或程序 「System.Diagnostics.DiagnosticSource ,Version = 4.0.1.1, Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'。定位的 程序集清單定義與程序集引用不匹配。 (異常來自HRESULT:0x80131040)文件名:在 Microsoft.EntityFrameworkCore.Infrastructure.RelationalServiceCollectionExtensions.AddRelational(IServiceCollection 服務) 'System.Diagnostics.DiagnosticSource,版本= 4.0.1.1, 文化=中性公鑰= cc7b13ffcd2ddd51'在 Microsoft.Extensions.DependencyInjection.NpgsqlEntityFrameworkServicesBuilderExtensions.AddEntityFrameworkNpgsql(IServiceCollection services)at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache。 <> c__DisplayClass4_1.b__2(Int64的 K)在 System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKEY的 鍵,Func`2 valueFactory)在 Microsoft.EntityFrameworkCore.DbContext.InitializeServices()在 Microsoft.EntityFrameworkCore。 DbContext.get_InternalServiceProvider() 在 Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService(IInfrastructure`1 訪問)在 Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func`1 廠)在 微軟.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(字符串 contextType)在 Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(字符串 targetMigration,字符串contextType)位於 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase。 <> c__DisplayClass0_1。 < .ctor> b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(動作 動作)
無法加載文件或組件 「System.Diagnostics.DiagnosticSource,版本= 4.0.1.1, Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'。定位的 程序集清單定義與程序集引用不匹配。 (從HRESULT異常:0x80131040)
到的溶液中添加此到的.csproj文件:
<PropertyGroup>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
發生這種情況顯然是由於一個bug。
似乎無法弄清楚爲什麼會發生這種情況,雖然... – Jakov