【发布时间】: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_identity。
my 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”。
它仍在寻找我已更改为 IdentityContext 的 DefaultConnection。如何修改该连接名称?
已解决:我修改了那个自定义类:
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 访问UserManager 和RoleManager。
【问题讨论】:
-
您是否使用身份模板创建了项目?如果是这样,
Models文件夹中已经有一个ApplicationDbContext或类似的东西 -
不,我没有,这是我的问题,我想手动从空设置项目,所以没有
ApplicationContext。 -
您需要在 OWIN 中注册
IdentityContext并使用它来代替IdentityDbContext。我建议你用模板开始一个新项目,这样你就可以看到它是如何完成的 -
我知道了,非常感谢!
标签: c# asp.net asp.net-mvc-5 asp.net-identity