【问题标题】:ASP.NET Identity - Modify default connection string nameASP.NET Identity - 修改默认连接字符串名称
【发布时间】:2017-12-09 18:42:37
【问题描述】:

我正在使用 EF6 和 Identity,并配置了 2 个单独的连接字符串:

<connectionStrings>
    <add name="AppDbContext" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=db_entity;Trusted_Connection=True;" />
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=db_identity;Trusted_Connection=True;" />
</connectionStrings>

它工作正常,我的实体存储在db_entity,用户信息(只有5个默认的aspnet身份表)存储在db_identitymy database

我可以看到 AspNet Identity 正在使用 DefaultConnection,我想修改该名称。我尝试创建这个自定义类(我之前没有使用任何自定义类作为标识):

public class IdentityContext : IdentityDbContext<IdentityUser>
{
        public IdentityContext() : base("IdentityContext")
        {

        }

        public static IdentityContext Create()
        {
            return new IdentityContext();
        }
}

并将 web.config 中的 DefaultConnection 更改为 IdentityContext。 但它不起作用,当我运行应用程序时,它会引发异常:

SqlException:无法将文件“C:\Users\thang\Documents\GitHub\GSSPHN\EmptyWeb\App_Data\DefaultConnection.mdf”附加为数据库“DefaultConnection”。

它仍在寻找我已更改为 IdentityContextDefaultConnection。如何修改该连接名称?

已解决:我修改了那个自定义类:

public class IdentityContext : IdentityDbContext<IdentityUser>
{
        public IdentityContext() : base("IdentityContext")
        {
            UserManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(this));
            RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(this));
        }

        public UserManager<IdentityUser> UserManager { get; set; }
        public RoleManager<IdentityRole> RoleManager { get; set; }
}

现在我可以从指向我指定的连接名称的IdentityContext 访问UserManagerRoleManager

【问题讨论】:

  • 您是否使用身份模板创建了项目?如果是这样,Models 文件夹中已经有一个 ApplicationDbContext 或类似的东西
  • 不,我没有,这是我的问题,我想手动从空设置项目,所以没有ApplicationContext
  • 您需要在 OWIN 中注册 IdentityContext 并使用它来代替 IdentityDbContext。我建议你用模板开始一个新项目,这样你就可以看到它是如何完成的
  • 我知道了,非常感谢!

标签: c# asp.net asp.net-mvc-5 asp.net-identity


【解决方案1】:

您应该更改Startup.Auth.cs 或初始化UserManager 的地方;

UserManagerFactory = () => new UserManager<IdentityUser>(new IdentityDbContext<IdentityUser>()); 

UserManagerFactory = () => new UserManager<IdentityUser>(new IdentityContext());

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多