标识无法连接到远程数据库,请继续连接到本地数据库



我正在使用Identity框架和ASP.NET MVC5(db first(。
当地的一切都还可以,但是身份无法连接到我在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=&quot;data source=MY-PCSQLEXPRESS;Initial Catalog=MyLocalDBName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
    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=&quot;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&quot;" 
     providerName="System.Data.EntityClient"  />

(当我想与远程数据调试时,显然会评论本地数据库,反之亦然(

很奇怪的是,身份始终是 local db(它甚至创建了一个名为MyRemoteDBName的新DB,但在我第一次启动我的应用程序时本地(。

但是,实体框架正确地转到远程数据库,并从远程db显示数据!

我在IdentityModels.cs中也有此类:

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是在本地创建的(?!(

为什么身份总是转到 local db,而实体框架正确地转到远程 db?

编辑

这是我实现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模型。它不能通过身份理解。因此,您需要为身份添加另一个连接字符串,例如:

<!-- Local DB -->
<add name="IdentityConnection" connectionString="data source=MY-PCSQLEXPRESS;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();
    }
}

相关内容

  • 没有找到相关文章

最新更新