本地一切正常我有2个上下文类,导致2个数据库文件
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-myTest-Identity.mdf;Initial Catalog=aspnet-myTest-Identity;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="AppContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DataDB.mdf;Initial Catalog=DataDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
当我将此发布到Azure时,我需要在发布过程中提供2个连接字符串。 在Azure中,我还创建了2个不同的物理数据库。
发布后,VS2017对连接字符串进行了如下更改
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=tcp:escapegamessqlserver.database.windows.net,1433;Initial Catalog=identitydb;User Id=mylogin;Password=mypassword;" providerName="System.Data.SqlClient" />
<add name="AppContext" connectionString="Data Source=tcp:escapegamessqlserver.database.windows.net,1433;Initial Catalog=Datadb;User Id=mylogin;Password=mypassword;" providerName="System.Data.SqlClient" />
<add name="AppContext_DatabasePublish" connectionString="Data Source=tcp:escapegamessqlserver.database.windows.net,1433;Initial Catalog=Datadb;User ID=mylogin;Password=mypassword" providerName="System.Data.SqlClient" />
</connectionStrings>
发布过程添加了1个DatabasePublish connectionstring而不是2,正如我所料。
问题
两个不同的上下文都在1个数据库中....数据库 Datadb 充满了迁移和所有表。虽然我希望在 identitydb 上进行与用户相关的迁移。
我不知道两个上下文如何在同一个物理数据库中结束,同时有两个不同的连接线,而在本地它的工作就像一个魅力......
完成后,数据上下文如下
public class myAppContext : DbContext
{
public myAppContext() : base("AppContext")
{
}
}
身份部分或多或少开箱即用
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
static ApplicationDbContext()
{
// Set the database initializer wich is run once duing application start
// This seeds the database with admin user credentials to the admin role
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<virusescapebe.ViewModels.RoleViewModel> RoleViewModels { get; set; }
}
答案 0 :(得分:0)
根据你的描述,我在我这边检查了这个问题。我通过VS发布向导发布了我的Web应用程序,并手动配置了AppContext
和DefaultConnection
的连接字符串,如下所示:
由于我在运行时选择了使用此连接字符串(更新目标web.config),您可以利用KUDU或Azure App服务编辑器查看修改后的web.config并检查连接字符串设置。您可以关注的详细信息Understanding the Azure App Service Editor。
两个不同的上下文都在1个数据库中....数据库Datadb充满了迁移和所有表。虽然我期望在identitydb上进行与用户相关的迁移。
从您发布的web.config中,您创建了一个SQL Server(escapegamessqlserver.database.windows.net
),并为您的 DefaultConnection 连接字符串创建了一个名为identitydb
的sql数据库,并创建了一个名为SQL的数据库您的 AppContext 连接字符串Datadb
。虽然,我不知道AppContext_DatabasePublish
来自哪里。但是根据您的myAppContext
和ApplicationDbContext
,连接字符串已指向相关的azure sql数据库,您的应用程序应该按预期工作。
此外,您可以在Azure门户的“设置&gt;应用程序设置”下配置 DefaultConnection 和 AppContext 连接字符串,而不是手动为每个设置连接字符串你的DbContext。此时,将不会修改已发布的web.config下的连接字符串,并且应用服务将在运行时根据您在Azure门户上的配置覆盖连接字符串设置。有关详细信息,您可以关注Configure web apps in Azure App Service。
答案 1 :(得分:0)
这已经解决了。 我在Azure端的web.config中的设置被您可以在Azure门户中设置的Connectionstring选项覆盖
应用服务 - &gt; (app的名称) - &gt;应用程序设置 - &gt;连接字符串
有一个值为 defaultConnection ,这个值覆盖了我自己在web.config文件中的设置