【发布时间】:2012-09-19 05:05:10
【问题描述】:
是否可以将 Simple Membership Provider 与 mysql 一起使用(也使用实体框架)
如果是,如何实现。
非常感谢任何文档/链接
提前致谢
【问题讨论】:
标签: mysql asp.net-mvc-4
是否可以将 Simple Membership Provider 与 mysql 一起使用(也使用实体框架)
如果是,如何实现。
非常感谢任何文档/链接
提前致谢
【问题讨论】:
标签: mysql asp.net-mvc-4
查看 Fabio Costa 的这篇简短文章,了解如何将 SimpleMembership 和 OAuth 与 mySQL 和 bigint 或任何您想要的数据库和数据类型一起使用:http://fabiocosta.ca/2012/11/24/use-simplemembership-and-oauth-with-any-database-and-datatype/。它应该可以解决您的问题。祝你好运。
我还对我的代码进行了以下更改:
添加了对 MySql.Data、MySql.Data.Entity 和 MySql.Web 的引用。在每个引用上将属性“复制本地”修改为 true。
更改了连接字符串并在 web.config 中添加了 DbProviderFactory 以启用 MySql 连接。
在 web.config 中添加了 roleManager 和 memberShip 配置。
web.config
<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());
}
}
【讨论】:
在https://mysqlmembershipprovider.codeplex.com/ 有一个已接受答案的升级版,它基于 xyz37 的作品和 ASP.NET Web Stack。
【讨论】:
是的,只需访问https://github.com/xyz37/MySqlSimpleMembershipProvider
下载示例应用程序并根据您的需要进行修改。它开箱即用,效果很好。在创建用户和适当权限后第一次运行应用程序时,如果出现无法创建数据库的错误,请刷新浏览器一两次,它将创建数据库。
【讨论】:
我在 GitHub 上创建 MySqlSimpleMembershipProvider 并制作示例项目。
https://github.com/xyz37/MySqlSimpleMembershipProvider
就是这样。
感谢您回答这个问题。
【讨论】:
UserProfile 类,它与 MVC4 模板附带的部分类 UserProfile 非常相似。这是为什么呢?
令人惊讶的是,那里的供应商很少,对于 MySQL 来说似乎没有,这真的很可悲。 覆盖 SimpleMemberShip Provider 以使用 MySQL 似乎很容易,但我找不到为此制作工作包的人。
但是我确实找到了一个看起来不错的 MonogDB 包(虽然没有测试它) http://extmongomembership.codeplex.com/
我们只能希望 MySQL 将来会支持这一点——尽管我对此表示怀疑,因为没有关于它的公告。
【讨论】:
我正在使用 LLBLGen(适用于 MySql、Oracle、Firebird、DB2 等):SimpleMembershipProvider in MVC4 for MySql, Oracle, and more with LLBLGen。
您可以通过使用您想要的任何 DAL 策略创建自己的 ExtendedMembershipProvider 实现来执行本文中描述的相同操作。如果您想使用实体框架,您将使用支持实体框架的 MySql 提供程序编写您的提供程序实现(请参阅:DevArt's MySql Entity Framework Tutorial)。
【讨论】:
很遗憾,没有。
SimpleMembershipProvider 最终只是我们又爱又恨的旧 MembershipProvider 的派生类。
之所以存在,是因为人们不喜欢您必须重写多少抽象函数才能使自定义 MembershipProvider 正常工作。所以这是MembershipProvider 的一个非常简单的实现。您必须返回使用 SimpleMembershipProvider 重新覆盖这些函数的实现。
我对修改数据库设计有同样的问题,不得不回到自定义的MembershipProvider 类。
另外,取自微软员工/ASP.NET 开发人员John Galloway's blog:
虽然 SimpleMembership 与数据库无关,但它可以跨 SQL Server 系列。它继续支持完整的 SQL Server,但它 也适用于 SQL Azure、SQL Server CE、SQL Server Express 和 本地数据库。一切都实现为 SQL 调用,而不是要求 存储过程、视图、代理和更改通知。
请注意,SimpleMembership 仍然需要一些 SQL Server 风格 - 它不适用于 MySQL、NoSQL 数据库等。你可以看看 WebMatrix.WebData.dll 中的代码使用 ILSpy 之类的工具,如果您愿意的话 想看看为什么 - 有些地方有 SQL Server 特定的 SQL 正在执行语句,尤其是在创建和 初始化表。看来您可以与 如果您单独创建表,则为另一个数据库,但我没有 试过了,暂时不支持。
【讨论】: