Asp Identity自定义上下文



我正在构建一个单页应用程序,所以我使用了visual studio默认模板。在开发的时候,我有2个数据库实体框架。mdf和恒等式。mdf,因为这是默认配置,但现在我需要与用户建立关系,我不能很容易地联系到他们,因为他们在另一个数据库中。

在MVC模板中你可以很容易地这样做:

public class ApplicationUser: IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
    public DbSet<CustomTableItem> CustomTable{ get; set; } 
    //You can add more tables
}

当你使用单页应用程序时,它以一种我不理解的方式配置用户管理。

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

然后从这篇文章

这段代码使用UserStore类的默认构造函数,它将创建一个IdentityDbContext对象的新实例,因为没有提供对象。如果你想使用你自己的IdentityDbContext派生类,就像MVC 5项目那样,你可以修改上面的初始化代码并传入你自己的上下文。

它说我可以修改它,但它没有显示如何:(,我已经试过了,但我不能使它工作。这就是我要做的

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());

我错过了什么?

如果您为UserStore类使用默认构造函数(不带参数),则会发生以下情况:

public UserStore()
{
  this..ctor((DbContext) new IdentityDbContext());
  this.DisposeContext = true;
}

Identity framework用默认连接字符串为您创建自己的数据库上下文,与您自己的模型或DbContext无关。

Scott在他的文章中说UserStore有一个这样定义的构造函数:

public UserStore(DbContext context)
{
  base..ctor(context);
}

换句话说,您可以将DbContext作为参数提供给UserStore的构造函数:

UserManagerFactory = () => new UserManager<ApplicationUser>(
    new UserStore<ApplicationUser>(new ApplicationDbContext()))

其中ApplicationDbContext定义为您在问题中描述的。

您需要在ApplicationDbContext上创建一个迁移,它将在Entityframework.mdf中创建标识表。然后你必须从Identity中移出数据。MDF到你的主数据库。连接两个数据库并运行如下命令:

insert into EntityFramework.dbo.IdenetityUsers
select * from Identity.dbo.IdentityUsers

然而,我只在单个SQL Server实例中完成了从一个DB到另一个DB的数据迁移,而不是在localdb之间(我假设您使用这些)。所以这个方法可能行不通你需要将Identity.mdf中的数据导出为csv文件然后再导入到EntityFramework.mdf

相关内容

  • 没有找到相关文章

最新更新