是否可以将 Simple Membership Provider 与 mysql 一起使用(也使用实体框架)
如果是,如何实现。
非常感谢任何文档/链接
预先感谢
是否可以将 Simple Membership Provider 与 mysql 一起使用(也使用实体框架)
如果是,如何实现。
非常感谢任何文档/链接
预先感谢
我在 GitHub 上创建 MySqlSimpleMembershipProvider 并制作示例项目。
https://github.com/xyz37/MySqlSimpleMembershipProvider
就这样。
感谢您对这个问题的回答。
查看 Fabio Costa 的这篇简短文章,了解如何将 SimpleMembership 和 OAuth 与 mySQL 和 bigint 或您想要的任何数据库和数据类型一起使用:http: //fabiocosta.ca/2012/11/24/use-simplemembership-and-oauth-with-任何数据库和数据类型/。它应该可以解决您的问题。祝你好运。
我还对我的代码进行了以下更改:
添加了对 MySql.Data、MySql.Data.Entity 和 MySql.Web 的引用。在每个引用上将属性“复制本地”修改为 true。
更改连接字符串并在 web.config 中添加 DbProviderFactory 以启用 MySql 连接。
在 web.config 中添加了 roleManager 和 memberShip 配置。
网络配置
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=localhost;Database=dbname;User ID=username;Password=password;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<clear />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<system.web>
<roleManager enabled="true" defaultProvider="simple">
<providers>
<clear/>
<add name="simple" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="simple">
<providers>
<clear/>
<add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
</providers>
</membership>
</system.web>
_AppStart.cshtml
@{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
}
App_Start\FilterConfig.cs
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new InitializeSimpleMembershipAttribute());
}
}
很不幸的是,不行。
SimpleMembershipProvider
MembershipProvider
最终只是我们都爱和恨的好,旧的派生类。
它的存在是因为人们不喜欢你必须重写多少抽象函数才能获得自定义MembershipProvider
工作。所以这是一个非常愚蠢的实现MembershipProvider
。你必须回去重新覆盖这些函数的实现SimpleMembershipProvider
。
我对修改数据库设计有同样的问题,不得不回到自定义MembershipProvider
类。
此外,取自 Microsoft 员工/ASP.NET 开发人员John Galloway 的博客:
虽然 SimpleMembership 与数据库无关,但它适用于 SQL Server 系列。它继续支持完整的 SQL Server,但也适用于 SQL Azure、SQL Server CE、SQL Server Express 和 LocalDB。一切都作为 SQL 调用实现,而不需要存储过程、视图、代理和更改通知。
请注意,SimpleMembership 仍然需要一些 SQL Server 风格 - 它不适用于 MySQL、NoSQL 数据库等。如果您想查看 WebMatrix.WebData.dll 中的代码,可以使用 ILSpy 等工具查看为什么 - 在某些地方执行 SQL Server 特定的 SQL 语句,尤其是在创建和初始化表时。如果您单独创建表,您似乎可以使用另一个数据库,但我还没有尝试过,目前不支持它。
我正在通过使用 LLBLGen(适用于 MySql、Oracle、Firebird、DB2 等)来做到这一点:MVC4 中的 SimpleMembershipProvider 用于 MySql、Oracle 和更多的 LLBLGen。
您可以通过使用您想要的任何 DAL 策略创建自己的 ExtendedMembershipProvider 实现来执行本文中描述的相同操作。如果您想使用实体框架,您将使用支持实体框架的 MySql 提供程序编写您的提供程序实现(请参阅:DevArt 的 MySql 实体框架教程)。
令人惊讶的是,那里的供应商很少,对于 MySQL 来说似乎没有,这真的很可悲。覆盖 SimpleMemberShip Provider 以使用 MySQL 似乎很容易,但我找不到为此制作工作包的人。
然而,我确实找到了一个看起来不错的 MonogDB 包(虽然没有测试它) http://extmongomembership.codeplex.com/
我们只能希望 MySQL 将来会支持这一点——尽管我对此表示怀疑,因为没有关于它的公告。
是的,只需访问https://github.com/xyz37/MySqlSimpleMembershipProvider
下载示例应用程序并根据您的需要进行修改。它开箱即用,效果很好。当您在创建用户和适当的权限后第一次运行应用程序时,如果出现无法创建数据库的错误,请刷新浏览器一次或两次,它将创建数据库。
在https://mysqlmembershipprovider.codeplex.com/上有一个已接受的升级答案,它基于 xyz37 的作品和 ASP.NET Web Stack。