我想使用自己的外部sql数据库而不是基本的asp上下文创建一个owin身份验证。我可以从数据库创建一个edmx模型,但我不知道如何使用它来识别用户。
当我将ApplicationUser使用的基础数据库连接更改为我自己的连接时,我得到了这个例外。
我已经创建了至少30个项目来测试我在谷歌上找到的解决方案,但没有一个能为我工作。
答案 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);
}
在此之后,我可以做任何我想做的事。