MVC4应用程序 - 如何删除实体框架并实现SimpleMembershipProvider?

时间:2013-09-13 10:58:15

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

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

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

我的想法是: 1.禁用EntityFramework,用于实现“Membership”的所有“默认”数据连接和表。 2.通过从SimpleMembershipProvider继承我自己的提供程序类(以支持Forms和OAuth身份验证),在NoSQL之上实现我自己的提供程序 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中?) 如果我的计划存在根本缺陷或误解,请告诉我。

感谢任何提示。

2 个答案:

答案 0 :(得分:1)

SimpleMembershipProvider 不使用Entity Framework。相反,它有自己的SQL操作。

您可以查看SimpleMembershipProvider.cs

的来源

如果您要实施自定义提供程序(以支持表单和OAuth身份验证),您希望通过复制 SimpleMembershipProvider 中的一些代码来覆盖 ExtendedMembershipProvider

enter image description here

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

复制图像

答案 1 :(得分:0)

根据this帖子

  

请注意,SimpleMembership仍然需要一些SQL Server的味道 -   它不适用于MySQL,NoSQL数据库等。你可以看看   WebMatrix.WebData.dll中的代码使用像ILSpy这样的工具,如果你的话   喜欢看为什么 - 有SQL Server特定SQL的地方   语句正在执行,特别是在创建和   初始化表。看起来你可以使用它   另一个数据库,如果你单独创建表,但我没有   尝试过,此时不支持。

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