编辑:我可能应该在我的项目(基于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),可能会使生活变得更加困难/混乱。
答案 0 :(得分:1)
只需废弃您的AppExtendedContext
和AppExtendedUser
类,然后使用ApplicationDbContext
和AppUser
并在其中添加自定义内容即可。
它们已经准备好进行修改(它们分别继承自IdentityDbContext<TUser>
和IdentityUser<TKey>
。可以将它们重命名为应用程序更熟悉的名称(例如Customer
或{{1} }),如果您不喜欢CustomerUser
名称。
实际上没有必要从AppUser
或AppUser
继承,它们是您的Core Identity的最终/具体类。
答案 1 :(得分:0)
确保您的上下文继承自IdentityDbContext<>
。您必须指定要用于应用程序用户的类型,您可以将其创建为扩展IdentityUser
的类(考虑到要开始扩展IdentityUser类的事实)。选择类似YourCustomContextType : IdentityDbContext<YourCustomUserType>
的东西。
对于身份服务注册,您也需要在此使用AddDefaultIdentity<YourCustomUserType>().AddEntityFrameworkStores<YourCustomContextType>()
指定课程。
确保您还了解其他人如何扩展身份功能: