使用自己的dbcontext创建身份验证

时间:2016-12-19 19:19:04

标签: asp.net sql-server asp.net-identity dbcontext asp.net-mvc-5

我想使用自己的外部sql数据库而不是基本的asp上下文创建一个owin身份验证。我可以从数据库创建一个edmx模型,但我不知道如何使用它来识别用户。

当我将ApplicationUser使用的基础数据库连接更改为我自己的连接时,我得到了这个例外。

我已经创建了至少30个项目来测试我在谷歌上找到的解决方案,但没有一个能为我工作。

1 个答案:

答案 0 :(得分:0)

<强> [溶液]

解决方案比我想要的容易得多..

我所要做的就是从IdentityUser继承我的User表(AspNetUser是我自己的表)

public partial class AspNetUser : IdentityUser

并使用我的自定义连接字符串名称(BCTSDb)代替IdentityModels.cs中的DefaultConnection。

public ApplicationDbContext()
        : base("BCTSDb", throwIfV1Schema: false)

这是数据库中的第一个代码,数据库首先不能使用这个解决方案(我不知道为什么)。

解决了 FIRST 问题。在此之后,由于缺少键和模糊的引用,我无法使用视图来构建任何控制器。

<强> [WHATTODO]

<强> 1。含糊不清的参考文献

在我的AspNetUser.cs类中,我使所有 ORIGINAL 属性覆盖: 例如UserName:

public override string UserName { get; set; }

这可能是没有必要的,没有这个我没有尝试过,也许这解决了我的dbcontext和ApplicationDbContext之间的模糊引用。

<强> 2。缺少密钥

我不知道我把钥匙放在哪里,但有解决方案:

在我的OnModelCreating函数结束时(在我的dbcontext中),我写了以下几行:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // your table operations, references
        // ...

        modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
        modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });

        base.OnModelCreating(modelBuilder);
    }

在此之后,我可以做任何我想做的事。