【发布时间】:2016-03-03 14:41:53
【问题描述】:
我目前正在开发一个 ASP.Net 5 / ASP.Net MVC 6 应用程序。我使用 EntityFramework 7 作为 ORM 框架和代码优先方法。 在我的模型中,我有以下内容:
- 一个
AppUser类,它继承自IdentityUser<int>。IdentityUser是通过Microsoft.AspNet.Identity.EntityFramework包提供的,允许从提供的类继承,通过从主键指定数据类型,当然,还可以添加自定义字段。一切正常(数据库架构、插入......) - 一个
Person类,它继承自上一个,并添加了一些特定于应用程序的字段和逻辑。基本上,我的想法是我的应用中的每个人都是潜在用户,但并不是每个用户都必须是人。
对于我所有的模型对象,我实现了一种通用存储库方法,它基本上为每个模型类实现通用 CRUD 操作,并允许覆盖特定域类的通用方法。
但是对于 AppUser 类,ASP.Net Identity 框架带有自己的存储库,它基本上允许添加用户、为用户添加角色、检查登录的唯一性等......
我的问题是:如何将这两个存储库一起使用,这样当我添加Person 时,它会通过身份框架存储库创建一个AppUser,然后将我的自定义Person 的字段存储在其中相同的数据库记录?
请注意,AppUser 上的 Person 继承已通过代码优先解决为单表继承:同一张表存储 AppUser 和 Persons,并生成了一个判别字段。
【问题讨论】:
-
如果您要将其与 Identity 紧密耦合,只需让您的应用程序上下文从 IdentityDbContext 继承即可。
-
已经是这样了。问题是,我如何使用我的存储库方法(例如
Add<T>(T entity)方法,它将实体添加到上下文)以及 AspNet Identity 框架提供的 UserManger 类。 -
好吧,最后碰巧让每个人都成为我的应用程序的用户将是一个不需要的功能,所以我改变了我的设计,现在我已经实现了组合继承(Person 不再继承自 AppUser ,但有一个可选字段用户)。因此,我仍然认为这个问题很有趣,并且很想知道你们是如何实现这个设计的。
标签: c# ef-code-first asp.net-identity asp.net-core-mvc