如何在mvc4代码中首先使用MySQL成员身份?

时间:2012-10-24 17:55:07

标签: mysql ef-code-first asp.net-mvc-4 asp.net-membership membership-provider

我是MySQL的MVC新手。我在MySQL的MVC 4中有代码优先应用程序。

public class Category
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual IEnumerable<Product> Products { get; set; }

}

public class Product
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
    public int CategoryID { get; set; }

    public virtual Category Category { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }
}

在web.config中:

  <connectionStrings>
    <add name="MyContext" connectionString="server=localhost;  User Id=root;  Pwd=mypass;  Persist Security Info=True;  database=catalogue" providerName="MySql.Data.MySqlClient " />
  </connectionStrings>

因此,这会在mysql中创建目录数据库。但我也想使用 mysql的成员身份。注册,创建用户和管理他们的角色。 例如,使用mvc4的默认AccountModels

我将此代码添加到web.config:

<system.web>

    <membership defaultProvider="MySQLMembershipProvider">
          <providers>
            <clear />
            <remove name="MySQLMembershipProvider" />
            <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="MySQL default application" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" enablePasswordRetrieval="True" enablePasswordReset="True" requiresQuestionAndAnswer="False" requiresUniqueEmail="False" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
          </providers>
        </membership>

        <profile defaultProvider="MySQLProfileProvider">
          <providers>
            <clear />
            <remove name="MySQLProfileProvider" />
            <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="Profiles" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />
          </providers>
        </profile>

        <roleManager enabled="false" defaultProvider="MySQLRoleProvider">
          <providers>
            <clear />
            <remove name="MySQLRoleProvider" />
            <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="Project Roles" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" />
          </providers>
        </roleManager>

  </system.web>

运行应用程序时出现此错误:

enter image description here

我忘记了哪一步?我不能使用会员资格。

(抱歉英语不好)

3 个答案:

答案 0 :(得分:3)

如果您想要使用随VS2010或VS2012的MVC4 Internet模板附带的成员资格提供程序,使用SQL Server系列以外的数据库,即SQL Server,SQL Compact和Azure,我认为这是不可行的,因为MVC4使用SimpleMembership提供程序,而不是数据库不可知。

已经说过,这并不意味着你无法达到你想要的效果。我建议使用Microsoft ASP.NET Universal Providers核心库。我建议你阅读这篇优秀的Post

现在,在本文中,作者Scott Hanselman提到了以下内容

  

使用这些通用“默认配置文件提供程序”意味着您所要做的就是设置正确的连接字符串,使用这些服务的应用程序将与SQL Server(加Express),SQL Server Compact和SQL Azure一起使用,无需更改代码来自你。

嗯,其他SQL标准怎么样?,让我们按照这些步骤进行操作,

1)确保首先更改连接字符串,然后使用Nuget Package Manager安装MySQL.Web和MySQL.Data。

    <connectionStrings>
      <add name="MySQLConn" connectionString="Server=localhost;Database=dbname;Uid=dbuser;Pwd=dbpass;" />
    </connectionStrings>

2)使用Nuget Package Manager查找并安装“Microsoft ASP.NET Universal Providers Core Libraries”或在Package Manager Console中运行以下命令,

Install-Package system.web.providers
Install-Package Microsoft.AspNet.Providers.Core

3)转到项目菜单 - &gt; ASP.Net配置,您将在浏览器ASP Net Administration工具中看到您的Web项目。

4)然后转到“提供程序”选项卡,转到“为每个功能选择不同的提供程序(高级)”

5)确保选择MySQL Membership Provider。

6)然后转到“安全”选项卡,创建一些您认为项目所需的角色和用户。 如果由于某种原因您在此处收到错误,请尝试更改您的网络配置,并使用this替换成员资格,角色和个人资料

7)享受!

我希望这会有所帮助

PS:我对此也很陌生,所以我愿意接受关于针对其他SQL数据库的最佳MVC4成员资格提供程序的建议。

答案 1 :(得分:1)

作为附注,您不能使用相同的帐户控制器,ASP Net MVC3的Internet模板或VS2010或VS2012的MVC4。虽然你必须自己实现这一切。

如果要为登录/注销/角色管理/创建用户等快速添加MVC模板,可以使用例如Security Guard。

我提出的方法不是补丁,也不是黑客,ASP Net Membership Provider长期由Microsoft实施和推广,MySQL将功能添加到网络中。连接器,他们甚至发布了它。的 Here

所以不用担心,你可以安全地使用这种方法,除非有一个强烈反对使用ASP Net Membership Provider的论据,我不知道。

答案 2 :(得分:0)

这取自GridWizzard - 您只需要在appsettings下将enableSimpleMembership设置为false,http://gridwizard.wordpress.com/2014/03/05/asp-net-mvc4-just-get-it-running-without-having-to-implement-membershiproleprovider/