身份无法连接到远程数据库,保持连接到本地数据库
Identity can't connect to remote DB, keep connecting to local DB
我正在使用 Identity
框架和 ASP.NET MVC5(数据库优先)。
在本地一切正常,但身份无法连接到我在 Azure 上托管的远程数据库。
我在 web.config
中的连接字符串看起来像这样
<!-- Local DB -->
<add name="MyEntities"
connectionString="metadata=res://*/EntityDataModel.csdl|res://*/EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MY-PC\SQLEXPRESS;Initial Catalog=MyLocalDBName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
<!-- Remote DB -->
<add name="MyEntities"
connectionString="metadata=res://*/EntityDataModel.csdl|res://*/EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=tcp:MyServerName.database.windows.net,1433;initial catalog=MyRemoteDBName;persist security info=False;user id=MyID;password=MyPassword;connect timeout=30;encrypt=True;trustservercertificate=False;application name=EntityFramework;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
(当我想用远程数据调试时,本地数据库明显有注释,反之亦然)
奇怪的是 Identity 总是转到 LOCAL 数据库(它甚至创建了一个名为 MyRemoteDBName
的新数据库,但在我第一次启动我的应用程序时是在本地) .
但是,Entity Framework 正确地转到远程数据库并显示来自远程数据库的数据!
我的 IdentityModels.cs
中也有这个 class :
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyLocalDBName", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我想我错了:public ApplicationDbContext() : base("MyLocalDBName", throwIfV1Schema: false)
?
我试图用 MyRemoteDBName
替换 MyLocalDBName
,但是 MyRemoteDBName
是在本地创建的 (?!)
为什么 Identity 总是转到 local 数据库,而 Entity Framework 正确地转到 remote 数据库?
编辑 :
下面是我实例化 ApplicationDbContext
的方法:
ApplicationDbContext context = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
您使用的连接字符串适用于 EF ADO.NET 模型。 Identity 无法理解。所以需要为Identity增加一个连接字符串,如:
<!-- Local DB -->
<add name="IdentityConnection" connectionString="data source=MY-PC\SQLEXPRESS;Initial Catalog=MyLocalDBName;integrated security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
<!-- Remote DB -->
<add name="IdentityConnection"
connectionString="data source=tcp:MyServerName.database.windows.net,1433;initial catalog=MyRemoteDBName;persist security info=False;user id=MyID;password=MyPassword;connect timeout=30;encrypt=True;trustservercertificate=False;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
并在 ApplicationDbContext
上使用它作为:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("IdentityConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我正在使用 Identity
框架和 ASP.NET MVC5(数据库优先)。
在本地一切正常,但身份无法连接到我在 Azure 上托管的远程数据库。
我在 web.config
中的连接字符串看起来像这样
<!-- Local DB -->
<add name="MyEntities"
connectionString="metadata=res://*/EntityDataModel.csdl|res://*/EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MY-PC\SQLEXPRESS;Initial Catalog=MyLocalDBName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
<!-- Remote DB -->
<add name="MyEntities"
connectionString="metadata=res://*/EntityDataModel.csdl|res://*/EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=tcp:MyServerName.database.windows.net,1433;initial catalog=MyRemoteDBName;persist security info=False;user id=MyID;password=MyPassword;connect timeout=30;encrypt=True;trustservercertificate=False;application name=EntityFramework;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
(当我想用远程数据调试时,本地数据库明显有注释,反之亦然)
奇怪的是 Identity 总是转到 LOCAL 数据库(它甚至创建了一个名为 MyRemoteDBName
的新数据库,但在我第一次启动我的应用程序时是在本地) .
但是,Entity Framework 正确地转到远程数据库并显示来自远程数据库的数据!
我的 IdentityModels.cs
中也有这个 class :
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyLocalDBName", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我想我错了:public ApplicationDbContext() : base("MyLocalDBName", throwIfV1Schema: false)
?
我试图用 MyRemoteDBName
替换 MyLocalDBName
,但是 MyRemoteDBName
是在本地创建的 (?!)
为什么 Identity 总是转到 local 数据库,而 Entity Framework 正确地转到 remote 数据库?
编辑 :
下面是我实例化 ApplicationDbContext
的方法:
ApplicationDbContext context = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
您使用的连接字符串适用于 EF ADO.NET 模型。 Identity 无法理解。所以需要为Identity增加一个连接字符串,如:
<!-- Local DB -->
<add name="IdentityConnection" connectionString="data source=MY-PC\SQLEXPRESS;Initial Catalog=MyLocalDBName;integrated security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
<!-- Remote DB -->
<add name="IdentityConnection"
connectionString="data source=tcp:MyServerName.database.windows.net,1433;initial catalog=MyRemoteDBName;persist security info=False;user id=MyID;password=MyPassword;connect timeout=30;encrypt=True;trustservercertificate=False;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
并在 ApplicationDbContext
上使用它作为:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("IdentityConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}