C# 为什么IdentityUser类在Microsoft.AspNet.Identity.EntityFramework命名空间中,而不在核心包中?
为什么C# 为什么IdentityUser类在Microsoft.AspNet.Identity.EntityFramework命名空间中,而不在核心包中?,c#,asp.net,.net,entity-framework,asp.net-identity-2,C#,Asp.net,.net,Entity Framework,Asp.net Identity 2,为什么Microsoft.AspNet.Identity.EntityFramework包中的IdentityUser类没有包含在Microsoft.AspNet.Identity.Core包中 为什么要依赖EntityFramework?这似乎是一个简单的类 我错过了什么 我通常按数据层与DAL分离。为IdentityUser类向EntityFramework添加依赖项似乎有点过分。您问: 为什么IdentityUser类在 Microsoft.AspNet.Identity.EntityFr
Microsoft.AspNet.Identity.EntityFramework
包中的IdentityUser
类没有包含在Microsoft.AspNet.Identity.Core
包中
为什么要依赖EntityFramework?这似乎是一个简单的类
我错过了什么
我通常按数据层与DAL分离。为IdentityUser
类向EntityFramework
添加依赖项似乎有点过分。您问:
为什么IdentityUser类在
Microsoft.AspNet.Identity.EntityFramework软件包…为什么要安装它
依赖实体框架
这是因为Identity的开箱即用实现实际上依赖于实体框架
ASP.NET网站包含以下文章:
这表明:
默认情况下,ASP.NET标识系统将用户信息存储在
SQL Server数据库,并首先使用实体框架代码创建
数据库。对于许多应用程序,这种方法效果很好。
但是,您可能更喜欢使用不同类型的持久性
机制,例如Azure表存储,或者您可能已经拥有
结构与默认结构截然不同的数据库表
实施在这两种情况下,您都可以编写自定义的提供程序
用于存储机制,并将该提供程序插入
应用程序
同一页还应回答您在评论中提出的有关创建IUser的自定义实现的问题:
自定义用户类
在实现自己的存储提供程序时,必须创建一个用户
类,该类相当于中的IdentityUser类
Microsoft.ASP.NET.Identity.EntityFramework命名空间:
身份核心的设计不与EF或任何特定的用户和角色类型相耦合。一切都被商店抽象化了。事实上,对于任何给定的持久性提供程序,类型根本不需要是POCO
对于Identity 3.0,我们考虑将当前的类型放在core中(事实上,在某个时候我们已经有了它们),但我们从熟悉其他持久性框架的人那里得到了非常可靠的反馈,尽管这些类型可以符合“POCO”的通用定义,但它们非常特定于EF
我们还考虑在核心中使用基类,我们将在EF包中为EF扩展这些基类。我们到达了现在的位置,因为这似乎没有带来足够的好处。这是在增加额外继承层的复杂性之间进行的(复杂性越高,我们就越容易引入bug)与类型本身没有那么复杂这一事实相比,持久化提供者编写者如果想将它们作为起点,欢迎复制并粘贴代码。请看下面的帖子:@DavidTansey这篇帖子展示了作者创建自己的MyUser
类来实现IUser
接口。作者将IdentityUser
中的许多典型属性手动添加到他的自定义类中。这就是人们通常做的吗?他们不像Visual Studio中的大多数模板那样使用从IdentityUser
继承的自定义ApplicationUser
类?@IssaFram:如果您不想依赖EntityFramework,您必须这样做。在这个列表的底部有一个EF free提供程序的实现列表。那么您是说我们不能删除IdentityUser
中包含的任何默认属性?例如,如果我不想要PhoneNumber
,我就不能删除它?大卫·坦西:这是正确的,尽管对于Identity 3.0来说有点过时。例如,在Identity 3.0中没有IUser接口。对于Identity 2.0,如果您不需要基类和属性,则可以从IUser继承并向UserManager注册POCO。@Pranavratogi这可能是最好的答案。我看到了IUser
,但那个界面对我来说毫无意义。