当我在本地运行时,我手动运行以下命令,然后打包并将应用程序发布到我的IIS服务器上。
Add-Migration Initial
Update-Database
当我想发布到azure appservice时,这些命令会自动运行吗?如果是这样,当我将它发布到azure时,它如何知道使用不同的ConnectionString?
我在appsettings.json中添加了azure的connectionString但是我不明白当我发布到azure AppServices时我怎么能告诉我的控制器等使用它
"ConnectionStrings": {
"AzureTestConnection": "Data Source=tcp:xxxxxx-test.database.windows.net,1433;Initial Catalog=xxxxx;User Id=xxx@yyyy.database.windows.net;Password=xxxxxx",
"NWMposBackendContext": "Server=(localdb)\\mssqllocaldb;Database=NWMposBackendContext-573f6261-6657-4916-b5dc-1ebd06f7401b;Trusted_Connection=True;MultipleActiveResultSets=true"
}
我正在尝试使用不同连接字符串的三个配置文件
答案 0 :(得分:2)
当我想发布到azure appservice时,这些命令会自动运行吗?
EF不支持自动迁移,您可能需要手动执行添加迁移或dotnet ef迁移添加以添加迁移文件。您可以显式执行命令以应用迁移,也可以apply migrations in your code。
您可以在Startup.cs文件的Configure方法中添加以下代码:
using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
}
我正在尝试使用不同连接字符串的三个配置文件
您可以根据环境动态选择连接字符串,所以这是主要步骤,您可以参考它。
2.遵循ASP.NET Core MVC with Entity Framework Core开始。
3.使用您的两个连接字符串设置appsetting.json。
{
"ConnectionStrings": {
"DefaultConnection": "connectiondefault",
"azure": "connectionazure"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
注意:您还可以将门户网站上数据库中的连接字符串设置为此处,然后您可以在本地测试它,并可以使用调试进行故障排除。
此外,您可以尝试使用一个连接字符串进行测试,以确保连接到数据库没有问题。
4.启动开发人员异常页面使用app.UseDeveloperExceptionPage();
和启动类中的app.UseExceptionHandler
方法显示错误。
public Startup(IHostingEnvironment env)
{
Configuration = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
HostingEnvironment = env;
}
public IConfigurationRoot Configuration { get; }
public IHostingEnvironment HostingEnvironment { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsDevelopment())
{
services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
else
{
services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("azure")));
}
services.AddMvc();
}
有关详细信息,请参阅此thread。