Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么IdentityUser类在Microsoft.AspNet.Identity.EntityFramework命名空间中,而不在核心包中?_C#_Asp.net_.net_Entity Framework_Asp.net Identity 2 - Fatal编程技术网

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
,但那个界面对我来说毫无意义。