2010-03-25 84 views
27

是否可以设置ASP.NET MVC 2与MySQL数据库一起使用?如何设置ASP.NET MVC 2与MySQL?

+3

博客是完美的,并在FAQ中概述,但是,您需要在问题中提出您的问题,然后将答案发布为答案。这允许人们+/-您的答案,并发布自己的答案。 – 2010-03-25 03:16:39

+0

好帖子。我会说这适用于任何asp.net应用程序,而不仅仅是ASP.NET MVC。 – Craig 2010-03-25 03:18:19

+0

接受我的编辑,将第一行后的所有内容都作为答案发布,然后将其从问题中删除。另外,不要因为他没有想出在SO上写博客的方法,很多新手都认为它违反了规则。他会想出来的 – 2010-03-25 03:24:18

回答

36

我假设你有Visual Studio Professional 2008,可以访问MySQL服务器的实例,并且具有中等到高级的开发体验。这可能会与VS2008 Web版一起工作,但不能确定。

  1. 如果你还没有,(在这写的时候6.2.2.0)安装MySQL Connector for .NET
  2. 可选:安装MySQL GUI Tools
  3. 如果你还没有,安装MVC 2 RTM,或者更好,使用微软的Web Platform Installer。 (更新: MVC 2现已发布相当一段时间)
  4. 创建一个空的MySQL数据库。如果您不想使用MySQL root用户帐户(不安全)访问您的应用程序,请创建一个用户帐户并分配适当的权限(超出本文的范围)。
  5. 在Visual Studio中创建一个新的MVC 2应用程序
  6. 在MVC 2应用程序中,引用MySql.Web.dll。它将位于您的GAC中,或位于MySQL Connector安装程序所在的文件夹中。
  7. 修改您的web.config的连接字符串部分:

    <connectionStrings> 
        <remove name="LocalMySqlServer"/> 
        <add name="MySqlMembershipConnection" 
         connectionString="Data Source=[MySql server host name]; 
              userid=[user]; 
              password=[password]; 
              database=[database name];" 
         providerName="MySql.Data.MySqlClient"/> 
        </connectionStrings> 
    

    8.

    修改您的web.config的成员部分:

    <membership defaultProvider="MySqlMembershipProvider"> 
        <providers> 
         <clear/> 
         <add name="MySqlMembershipProvider" 
          type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, 
           Version=6.2.2.0, Culture=neutral, 
           PublicKeyToken=c5687fc88969c44d" 
          connectionStringName="MySqlMembershipConnection" 
          enablePasswordRetrieval="false" 
          enablePasswordReset="true" 
          requiresQuestionAndAnswer="false" 
          requiresUniqueEmail="true" 
          passwordFormat="Hashed" 
          maxInvalidPasswordAttempts="5" 
          minRequiredPasswordLength="6" 
          minRequiredNonalphanumericCharacters="0" 
          passwordAttemptWindow="10" 
          applicationName="/" 
          autogenerateschema="true"/> 
         </providers> 
        </membership> 
    

    9.

    修改web.config的角色管理器部分:

    <roleManager enabled="true" defaultProvider="MySqlRoleProvider"> 
        <providers> 
         <clear /> 
         <add connectionStringName="MySqlMembershipConnection" 
          applicationName="/" 
          name="MySqlRoleProvider" 
          type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, 
           Version=6.2.2.0, Culture=neutral, 
           PublicKeyToken=c5687fc88969c44d" 
          autogenerateschema="true"/> 
        </providers> 
        </roleManager> 
    

    修改你的web.config的轮廓部分:

    <profile> 
        <providers> 
         <clear/> 
         <add type="MySql.Web.Security.MySQLProfileProvider, MySql.Web, 
           Version=6.2.2.0, Culture=neutral, 
           PublicKeyToken=c5687fc88969c44d" 
          name="MySqlProfileProvider" 
          applicationName="/" 
          connectionStringName="MySqlMembershipConnection" 
          autogenerateschema="true"/> 
        </providers> 
        </profile> 
    

在这一点上,你应该能够运行应用程序,并具有默认ASP .NET MVC 2主页出现在您的浏览器中。但是,首先运行ASP.NET Web配置工具可能更好一些(在Visual Studio顶级菜单中:Project - > ASP.NET Configuration)。工具启动后,检查每个选项卡;没有错误=都很好。

配置工具Nathan Bridgewater's blog是实现此功能的关键。荣誉,内森。在页面下半部分找到“配置工具”标题。

我在这里发布的MySql.web.dll上的公钥标记应该不会很快改变。但是,如果您怀疑复制和粘贴等不良标记字符串,只需使用Visual Studio命令行运行:“sn -T [Path \ to \ your.dll]”以获取正确的公钥标记。

你有它,运行在MySQL上的ASP.NET MVC 2。干杯!

+1

感谢NovaJoe!我最近将这个工具复制到了自己的页面上,以便于查找。 http://www.integratedwebsystems.com/tools-source/ – Nathan 2010-04-15 19:20:07

+0

Noice!感谢你,我的朋友。这是一场艰苦的战斗,你的工具使它成为可能。弥敦道胜利! – NovaJoe 2010-04-17 19:03:13

+2

太棒了!我想我会在StackOverflow上创建一个新账户,再次投票给你! ;) – 2011-02-02 20:39:19

1

我相信在“10.修改您的网站的个人资料部分。配置::”

<profile> 
    <providers>   
    <clear /> ... 
     <add type="MySql.Web.Security.MySQLProfileProvider,...... 

类型=必须是: 类型= “MySql.Web.Profile.MySQLProfileProvider”

因为在 “MySql.Web.Security” 我还没有发现任何方法MySQLProfileProvider。 (但使用版本6.4.4。对于.NET 4.0)

而且至少,你必须创建自己的类来创建数据库表,如果没有准备好配置的数据库。 哈拉尔

+0

好注意。谢谢HL1234。我没有检查这个,但它也可能是一个错字。但是,也许这是命名空间已经改变了。不确定。 – NovaJoe 2011-11-03 18:23:31

+1

我需要进行此更改才能使其正常工作。 – AverageMarcus 2012-08-15 13:39:50