Итак, я работаю над ASP.NET Core 2.1 Web API.Я явно указал два набора конфигураций для «Разработка» и «Производство» с помощью следующих двух функций:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DataContext>(option => option
.UseMySql(Configuration.GetConnectionString("DefaultConnection"))
}
public void ConfigureDevelopmentServices(IServiceCollection services)
{
services.AddDbContext<DataContext>(option => option
.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
}
В appsettings.json у меня есть:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost; Database=datingApp; Uid=appuser; Pwd=zhanxucong"
}
}
Вappsettings.Development.json, у меня есть:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"ConnectionStrings": {
"DefaultConnection": "Data Source=DatingApp.db"
}
}
}
Когда я изучал урок, инструктор сказал, что по соглашению, когда ASPNETCORE_ENVIRONMENT = Development установлен, ASP.NET Core будет вызывать более конкретную функцию конфигурации(т. е. ConfigureDevelopmentServices) и используйте более конкретный файл конфигурации appsettings (т. е. appsettings.Development.json).И я могу подтвердить, что он хорошо работал на моих Windows и Mac.Однако, когда я запускаю это приложение в Linux, после запуска ef-миграции с вышеуказанными настройками, я получаю следующие ошибки:
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.1.4-rtm-31024 initialized 'DataContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None
System.ArgumentException: Keyword not supported: 'server'.
at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.GetIndex(String keyword)
at Microsoft.Data.Sqlite.SqliteConnectionStringBuilder.set_Item(String keyword, Object value)
at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.CreateReadOnlyConnection()
at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteDatabaseCreator.Exists()
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Keyword not supported: 'server'.
Есть идеи, почему эта ошибка произойдет?Это связано с тем, что Linux чувствителен к регистру?Спасибо!
Обновление: мой класс Program и мой класс StartUp (ctor по умолчанию, предоставляемый инструментом dotnet-cli при запуске «dotnet new webapi»:
Класс программы:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Класс запуска:
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
// ConfigureServices, ConfigureDevelopmentServices, Configure methods.
}