2

我是 MVC 和 MySQL 的新手。我在带有 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>

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

在此处输入图像描述

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

(抱歉英语不好)

4

3 回答 3

3

如果您想要使用 VS2010 或 VS2012 的 MVC4 Internet 模板附带的 Membership Provider,以及 SQL Server 系列以外的数据库,即 SQL Server、SQL Compact 和 Azure,我认为这是不可行的,因为 MVC4 使用SimpleMembership 提供程序,它不是数据库无关的。

话虽如此,但这并不意味着你无法实现你想要的。我建议使用 Microsoft ASP.NET Universal Providers Core Libraries。我建议您阅读这篇出色的帖子

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

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

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

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

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

2) 使用 Nuget 包管理器找到并安装“Microsoft ASP.NET Universal Providers Core Libraries”或在包管理器控制台中运行以下命令,

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

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

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

5) 确保选择 MySQL Membership Provider。

6)然后转到安全选项卡,并创建一些您认为对您的项目必要的角色和用户。 如果由于某种原因您在此处遇到错误,请尝试更改您的 Web 配置,并将Membership、Role 和 Profile 替换为

7)享受!

我希望这有帮助

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

于 2013-03-28T03:06:10.000 回答
1

作为旁注,您不能使用与 VS2010 或 VS2012 的 ASP Net MVC3 或 MVC4 的 Internet 模板相同的帐户控制器。尽管您必须自己实现所有这些。

如果您想为登录/注销/角色管理/创建用户等快速添加 MVC 模板,您可以使用例如安全卫士。

我提出的方法不是补丁,也不是骇客,ASP Net Membership Provider 由微软长期实施和推广,MySQL 将功能添加到网络。连接器,他们甚至发布了关于它的信息。这里

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

于 2013-03-29T01:20:25.647 回答
0

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

于 2014-03-06T00:51:36.513 回答