C# 在ASP.NETMVC6身份框架中实现继承

C# 在ASP.NETMVC6身份框架中实现继承,c#,ef-code-first,asp.net-identity,asp.net-core-mvc,C#,Ef Code First,Asp.net Identity,Asp.net Core Mvc,我目前正在开发一个ASP.NET5/ASP.NETMVC6应用程序。我使用EntityFramework7作为ORM框架,并采用代码优先的方法。 在我的模型中,我有以下内容: 一个AppUser类,它继承自IdentityUserIdentityUser是通过Microsoft.AspNet.Identity.EntityFramework包提供的,它允许用户通过指定主键的数据类型从所提供的类继承,当然,还可以向其添加自定义字段。使用它一切正常(数据库模式、插入等) 一个Person类,它继承

我目前正在开发一个ASP.NET5/ASP.NETMVC6应用程序。我使用EntityFramework7作为ORM框架,并采用代码优先的方法。 在我的模型中,我有以下内容:

  • 一个
    AppUser
    类,它继承自
    IdentityUser
    IdentityUser
    是通过
    Microsoft.AspNet.Identity.EntityFramework
    包提供的,它允许用户通过指定主键的数据类型从所提供的类继承,当然,还可以向其添加自定义字段。使用它一切正常(数据库模式、插入等)
  • 一个
    Person
    类,它继承了上一个类,并添加了一些特定于应用程序的字段和逻辑。基本上,我的想法是,我应用程序中的每个人都是潜在用户,但并非每个用户都需要成为一个人
对于我的所有模型对象,我实现了一种通用存储库方法,它基本上为每个模型类实现通用CRUD操作,并允许覆盖特定域类的通用方法

但是对于AppUser类,ASP.Net Identity framework自带了自己的存储库,它基本上允许用户添加用户、向用户添加角色、检查登录的唯一性等等

我的问题是:如何将这两个存储库一起使用,以便在我添加
人员
时,它通过Identity framework存储库创建一个
AppUser
,然后将我的自定义
人员
字段存储在同一数据库记录中


请注意,代码首先将AppUser上的Person继承解析为单表继承:同一个表存储AppUser和Person,并生成一个判别字段。

您创建了一个自定义管理器类,该类扩展了Identity framework提供的usermanger类。这个新的CustomUserManager类将具有UserManager类的所有功能,加上您想要为添加人员而实现的新功能

如果您要将这些功能与Identity紧密结合,只需让您的应用程序上下文继承自IdentityDbContext。事实已经如此。问题是,我如何使用我的存储库方法(例如,
Add(T entity)
方法,它将一个实体添加到上下文中)以及同时使用AspNet Identity framework提供的UserManger类。好吧,最终发生的情况是,让每个人都成为我应用程序中的用户将是一个不必要的功能,所以我改变了我的设计,现在我已经实现了按组合继承(不再有人从AppUser继承,但有一个可选的字段用户)。因此,我仍然认为这个问题很有趣,我很好奇你们是如何实现这个设计的。好主意,我继承了内置的UserManager,实现了我的CRUD接口并注入了所需的依赖项,所有这些都应该做到。我不知道为什么我没有想出这个简单的想法,在这两个东西之上构建一个类来共同工作!