c# – 如何在现有数据库中实现ASP.NET Identity 2.0?

前端之家收集整理的这篇文章主要介绍了c# – 如何在现有数据库中实现ASP.NET Identity 2.0?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前在ASP.NET 4.5 Web表单项目中实现了现有的成员资格.该应用程序使用EntityFramework 6.1.3版本与DbContext和当前在数据库的第一种方法.我想迁移旧的会员使用新的ASP.NET身份2.0系统.

我已经跟随this article执行迁移,但从未成功.我在The property ‘Claims’ on type ‘AspNetUser’ is not a navigation property提到错误.

它证实我在迁移过程中缺少一些基本的东西.

有人可以提供一步一步的指导来执行成功迁移吗?

我想谈一下以下几点:

1)在身份上,除了默认身份提供之外,我还有一些额外的用户数据.我看到有一个IdentityContext执行这些身份操作.我有一个不同的上下文继承自DbContext.我需要同时使用上下文吗?换句话说,IdentityContext是强制身份操作的?这两个上下文不能合并成一个吗?

2)我不限于数据库的第一种方法.由于身份使用代码第一种方法,我可以继续执行代码优先方法,但需要正确的步骤来跟进.

3)由于我有额外的用户数据,所以我需要扩展IdentityUser以添加新的属性?如果我将扩展IdentityUser,身份代码将无缝工作?

4)我遵循https://www.youtube.com/watch?v=blmkPA7XQf8视频教程,它在ApplicationDbContext中添加了迁移. ApplicationDbContext继承IdentityContext.它适用于我,但我想为我自己的上下文添加迁移,该继承自DbContext.这是因为ApplicationDbContext不包括其他表(非身份表).

5)我尝试在我的自定义Context.cs文件中应用迁移,其中包含所有身份和非身份表.我在this article建议的时候使用EntityFramework Power Tools的反向工程方法创建了这个类.

在创建POCO类之后,我添加了迁移并更新了数据库.我遇到的主要错误是:

IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no keys defined. 

IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.

根据此解决方案,我添加了配置,但最终创建了IdentityUserLogin,IdentityRole等新表,这些表是重复的身份表.

6)即使我保留重复的身份表(例如AspNetUserRoles和IdentityUserRole),我无法使用身份代码提取数据
var user = userManager.FindAsync(UserName.Text,Password.Text);并获得例外:

Invalid column name 'UserId'

解决方法

1) In identity,I have some extra user data other than what default
identity is providing. I see there is a IdentityContext which does
these identity operations. I have a different context which inherits
from DbContext. Do I need to use both the contexts? In other words
IdentityContext is compulsory for identity operation? Cannot these two
contexts be merged into one?

是的,首先使用数据库实现ASP.NET标识时,需要使用两个上下文. Asp.net身份使用System.Data.sqlClient提供者,而Edmx使用System.Data.EntityClientprovider.

2) I’m not restricted to Database first approach. Since the identity
uses the code first approach I am okay to go ahead with the code-first
approach but needs the correct steps to follow up.

ASP.NET MVC默认模板在代码优先方法中很容易实现,它提供了使用代码第一种方法实现ASp.NET标识,但并不是数据库第一种方法的问题.
https://danieleagle.com/2014/05/setting-up-asp-net-identity-framework-2-0-with-database-first-vs2013-update-2-spa-template/

3) Since I have extra user data so I need to extend the IdentityUser
to add new properties? If I will extend the IdentityUser will the
identity code work seamlessly?

是的,您可以扩展它.只要您想使用任何其他属性来扩展User.Identity的属性,首先将这些属性添加到ApplicationUser类中:

public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this,DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }

        //Extended properties
        public string City { get; set; }
    }

这三点也解决了余下的问题.

猜你在找的C#相关文章