【问题标题】:Why is the IdentityUser class in the Microsoft.AspNet.Identity.EntityFramework namespace and not in the Core package?为什么 IdentityUser 类在 Microsoft.AspNet.Identity.EntityFramework 命名空间中而不是在 Core 包中?
【发布时间】:2015-08-30 09:28:01
【问题描述】:

为什么IdentityUser 类在Microsoft.AspNet.Identity.EntityFramework 包中,而不是包含在Microsoft.AspNet.Identity.Core 包中?

为什么要依赖EntityFramework?这似乎是一个简单的类。

我错过了什么?

我通常通过数据层与我的 DAL 分开。为IdentityUser 类添加对EntityFramework 的依赖似乎有点多。

【问题讨论】:

  • @DavidTansey 该帖子显示作者创建了自己的MyUser 类实现IUser 接口。作者手动将IdentityUser 中的许多典型属性添加到他的自定义类中。人们通常会这样做吗?他们不像 Visual Studio 中的大多数模板那样使用从 IdentityUser 继承的自定义 ApplicationUser 类?
  • @IssaFram:如果您不想依赖 EntityFramework,那就必须这样做。在page 的底部有一个提供者 EF free 的实现列表。

标签: c# asp.net .net entity-framework asp.net-identity-2


【解决方案1】:

Identity 核心的设计与 EF 或任何特定形状的用户和角色类型无关。一切都被商店抽象出来。事实上,对于任何给定的持久性提供程序,类型甚至根本不需要是 POCO!

对于 Identity 3.0,我们考虑将当前的类型放在核心中(事实上,在某些时候我们有它们),但我们从熟悉其他持久性框架的人那里得到了非常可靠的反馈,尽管这些类型可以符合“POCO”,它们非常特定于 EF。

我们还考虑在核心中包含基类,我们将在 EF 包中为 EF 扩展这些基类。我们降落在我们现在的位置,因为这似乎没有足够的好处。它介于增加额外继承层的复杂性(更多复杂性将使我们更容易引入错误)与类型本身并不复杂以及希望将它们作为持久性提供者编写者的事实之间起点欢迎复制粘贴代码。

【讨论】:

    【解决方案2】:

    你问:

    为什么 IdentityUser 类在 Microsoft.AspNet.Identity.EntityFramework 包...为什么要它 依赖EntityFramework?

    这是因为开箱即用的 Identity 实现实际上依赖于实体框架。

    ASP.NET 站点有以下文章: Overview of Custom Storage Providers for ASP.NET Identity 表示:

    默认情况下,ASP.NET 身份系统将用户信息存储在一个 SQL Server 数据库,并使用 Entity Framework Code First 创建 数据库。对于许多应用程序,这种方法效果很好。 但是,您可能更喜欢使用不同类型的持久性 机制,例如 Azure 表存储,或者您可能已经拥有 具有与默认结构非常不同的数据库表 执行。无论哪种情况,您都可以编写自定义提供程序 用于您的存储机制并将该提供程序插入您的 应用。

    同一页面还应该回答您在 cmets 中有关创建 IUser 的自定义实现的问题:

    自定义用户类

    在实现您自己的存储提供程序时,您必须创建一个用户 等价于 IdentityUser 中的类 Microsoft.ASP.NET.Identity.EntityFramework 命名空间:

    【讨论】:

    • 那么您是说我们不能删除IdentityUser 中的任何默认包含属性?例如,如果我不想要PhoneNumber,我不能删除它吗?我只是想解决这个问题。
    • @David Tansey:这是正确的,虽然对于 Identity 3.0 来说有点过时了。例如。在 Identity 3.0 中没有 IUser 界面。
    • 对于 Identity 2.0 如果您不想要基类和属性,那么您可以从 IUser 继承并将您的 POCO 注册到 UserManager。
    • @pranavrastogi 这可能是最好的答案。我看到了IUser,但那个界面对我来说毫无意义。
    猜你喜欢
    • 2015-11-19
    • 2023-03-17
    • 1970-01-01
    • 2010-12-05
    • 2014-04-09
    • 2018-10-21
    • 1970-01-01
    • 2013-11-18
    • 2020-10-28
    相关资源
    最近更新 更多