ASP.NET Core(2.1)中的身份:为什么我们需要添加新的Context来自定义IdentityUser?

时间:2018-07-23 09:36:21

标签: c# asp.net-core asp.net-core-2.0 asp.net-core-2.1

编辑:我可能应该在我的项目(基于ASP.NET Core 2.1-具有MVC且具有“个人用户帐户”的WebApp)中添加该项目,但没有“ AppUser”(或从IdentityUser继承的等效类),而ApplicationDbContext则从IdentityDbContext继承,而不是从IdentityDbContext(或IdentityDbContext)继承。

我目前正在学习/从ASP.NET Core开始,并使用“向Add Custom user data to Identity添加“添加新的脚手架项目”,并注意到如果我希望脚手架创建自定义内容,则不能使用现有上下文(ApplicationDbContext)用户类别。启用该字段的唯一方法是添加新的上下文,这还将添加新的连接字符串。但是新的上下文似乎在本质上与我已经存在的上下文相同。

我还注意到,这两个新类(在我的情况下为AppExtendedContext和AppExtendedUser)放在Areas / Identity / Data下,而我实际上希望它们在Data和Models下。

所以我在想:为什么? ;-)

或者,以更具可操作性的术语来表达:将生成的代码重构为仅使用单个ApplicationDbContext是否安全?我会失去什么/会遇到什么麻烦?

答案可能很简单,例如“出于实用的原因”(例如,因为它使自动代码生成更容易/更安全);在那种情况下,只要我不打算再次使用脚手架,就可以安全地移动这些东西。但是话又说回来,升级时(例如升级到ASP.NET Core 2.2或ASP.NET Core 3.0),可能会使生活变得更加困难/混乱。

2 个答案:

答案 0 :(得分:1)

只需废弃您的AppExtendedContextAppExtendedUser类,然后使用ApplicationDbContextAppUser并在其中添加自定义内容即可。

它们已经准备好进行修改(它们分别继承自IdentityDbContext<TUser>IdentityUser<TKey>。可以将它们重命名为应用程序更熟悉的名称(例如Customer或{{1} }),如果您不喜欢CustomerUser名称。

实际上没有必要从AppUserAppUser继承,它们是您的Core Identity的最终/具体类。

答案 1 :(得分:0)

确保您的上下文继承自IdentityDbContext<>。您必须指定要用于应用程序用户的类型,您可以将其创建为扩展IdentityUser的类(考虑到要开始扩展IdentityUser类的事实)。选择类似YourCustomContextType : IdentityDbContext<YourCustomUserType>的东西。

对于身份服务注册,您也需要在此使用AddDefaultIdentity<YourCustomUserType>().AddEntityFrameworkStores<YourCustomContextType>()指定课程。

确保您还了解其他人如何扩展身份功能: