【问题标题】:MVC4 app - how to remove Entity Framework and implement SimpleMembershipProvider?MVC4 应用程序 - 如何删除实体框架并实现 SimpleMembershipProvider?
【发布时间】:2013-09-13 10:58:14
【问题描述】:

我正在尝试使用 ASP.NET MVC4 来管理表单身份验证和 OAuth (Facebook),并处理浏览器会话。

但我想管理 NoSQL 数据存储中的所有用户数据(实际上是所有数据)。由于我已经为该商店提供了数据访问层库,因此我认为我根本不应该使用实体框架。

我的想法是: 1.禁用EntityFramework,所有用于实现“会员”的“默认”数据连接和表。 2. 通过从 SimpleMembershipProvider 继承我自己的提供程序类,在 NoSQL 之上实现我自己的提供程序(以支持表单和 OAuth 身份验证) 3. 配置系统暂时不使用角色提供者(暂无管理角色的要求)

不幸的是,我无法执行“第 1 步”,即从所有默认连接和表中读取。

我确实设法注册并使用了我自己的 SimpleMembershipProvider 实现,但周围有一些代码不断调用“默认连接”。

在 web.config 中禁用 RoleManager 时,我的提供商遇到的异常示例:

  InnerException: System.InvalidOperationException
       HResult=-2146233079
       Message=The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588
       Source=MvcApplication5
       StackTrace:
            at MvcApplication5.Filters.InitializeSimpleMembershipAttribute.SimpleMembershipInitializer..ctor() in c:\Users\max\Documents\Visual Studio 2012\Projects\MvcApplication2\MvcApplication5\Filters\InitializeSimpleMembershipAttribute.cs:line 45
       InnerException: System.Configuration.Provider.ProviderException
            HResult=-2146233088
            Message=The Role Manager feature has not been enabled.
            Source=System.Web
            StackTrace:
                 at System.Web.Security.Roles.EnsureEnabled()
                 at System.Web.Security.Roles.get_Provider()
                 at WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo connect, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables)
                 at WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String connectionStringName, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables)
                 at MvcApplication5.Filters.InitializeSimpleMembershipAttribute.SimpleMembershipInitializer..ctor() in c:\Users\max\Documents\Visual Studio 2012\Projects\MvcApplication2\MvcApplication5\Filters\InitializeSimpleMembershipAttribute.cs:line 41
            InnerException: 

推荐的方法是什么? (在 web.config 中?) 如果我的计划存在根本缺陷或误解,请告诉我。

感谢任何提示。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-membership


    【解决方案1】:

    SimpleMembershipProvider 不使用实体框架。相反,它有自己的 SQL 操作。

    你可以看看SimpleMembershipProvider.cs的出处

    如果您想实现自定义提供程序(以同时支持表单和 OAuth 身份验证),您需要通过处理 SimpleMembershipProvider 中的一些代码来覆盖 ExtendedMembershipProvider

    从-SimpleMembership, Membership Providers, Universal Providers and the new ASP.NET 4.5 Web Forms and ASP.NET MVC 4 templates复制图像

    【讨论】:

    • 谢谢。实施 ExtendedMembershipProvider 似乎有效。不幸的是,没有明确的方法来理解需要哪些方法。此外,对于 OAuth,提供者应将“用户名”映射到整数“用户 ID”。为什么需要整数 ID?谢谢
    【解决方案2】:

    this发帖

    请注意,SimpleMembership 仍然需要一些 SQL Server 风格 - 它不适用于 MySQL、NoSQL 数据库等。你可以看看 WebMatrix.WebData.dll 中的代码使用 ILSpy 之类的工具,如果您愿意的话 想看看为什么 - 有些地方有 SQL Server 特定的 SQL 正在执行语句,尤其是在创建和 初始化表。看来您可以与 如果您单独创建表,则为另一个数据库,但我没有 试过了,暂时不支持。

    不过,您可能会看到 this 关于使用 ravendb 进行身份验证和授权的帖子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多