16

所以我刚刚拿起了 VS2012,我想用 EF5 启动一个 ASP.NET MVC 4 应用程序。

我的主机没有 MSSQL,所以我必须使用 MySQL。

如何告诉我的应用应该使用 MySQL?(我要么想使用 devart MySQL 连接器,要么想使用来自 mysql.com 的连接器)

4

3 回答 3

26

您需要使用连接字符串、DbProviderFactory 和 MySql 连接器 6.5.4 的自定义 DatabaseInitializer 设置配置。我已经详细介绍了让 EF5 和 MySql 运行的完整步骤,包括我博客上的初始化程序代码。如果您需要 ASP.Net Membership Provider 解决方案,之前有人问过:ASP.NET Membership/Role providers for MySQL?我还将在此处发布完整的 EF5 MySql 解决方案的解决方案。

MySql 连接器当前不支持 EF 5 迁移,并且 ASP.NET 仅支持 MS SQL 而不是 MySql 上的 SimpleMembership(MVC4 默认值)。以下解决方案适用于 Code First。

步骤是:

  1. 从 NuGet 获取 EF 5
  2. 从 NuGet (6.5.4) 或 MySql (6.6.4) 获取 MySql.Data 和 MySql.Data.Entity
  3. 配置 MySql 数据提供者
  4. 配置 MySql 连接字符串
  5. 创建自定义 MySql 数据库初始化程序
  6. 配置自定义 MySql 数据库初始化程序
  7. 如果需要,配置 ASP.NET 成员资格

数据库提供者

<system.data>
 <DbProviderFactories>
  <remove invariant="MySql.Data.MySqlClient"/>
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL" 
    type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
 </DbProviderFactories>
</system.data>

连接字符串

<connectionStrings>
  <add name="ConnectionStringName" 
    connectionString="Datasource=hostname;Database=schema_name;uid=username;pwd=Pa$$w0rd;" 
    providerName="MySql.Data.MySqlClient" />
</connectionStrings>

数据库初始化器

如果您使用来自 NuGet (6.5.4) 的 MySql 连接器,则需要自定义初始化程序。代码可在http://brice-lambson.blogspot.se/2012/05/using-entity-framework-code-first-with.htmlhttp://www.nsilverbullet.net/2012/11/07/获得6-steps-to-get-entity-framework-5-working-with-mysql-5-5/

然后将其添加到配置中

<configSections>
  <section name="entityFramework" 
    type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, 
    EntityFramework, Version=5.0.0.0, Culture=neutral, 
    PublicKeyToken=b77a5c561934e089" />
</configSections>
<entityFramework>
  <contexts>
      <context type="Namespace.YourContextName, AssemblyName">
         <databaseInitializer 
           type="Namespace.YourChosenInitializer, AssemblyName">
         </databaseInitializer>
      </context>
    </contexts>
    <defaultConnectionFactory 
      type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
</entityFramework>

ASP.NET 成员资格

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

让 AccountController 和 Views 工作:

  1. 删除 MVC 4 AccountController、AccountModels、Account 视图文件夹和 _LoginPartial 共享视图
  2. 创建一个新的 MVC 3 Web 应用程序
  3. 将 MVC 3 AccountController、AccountModels、Account 视图文件夹和 _LogOnPartial 共享视图复制到您的 MVC 4 应用程序中
  4. @Html.Partial(“_LoginPartial”)在共享的 _Layout 视图中替换为@Html.Partial(“_LogOnPartial”)
于 2012-11-07T15:14:48.603 回答
1
<add name="ConnectionString" providerName="MySql.Data.MySqlClient" connectionString="Data Source=127.0.0.1; port=3306; Initial Catalog=DbName; uid=root; pwd=*Password*;" />
于 2017-05-04T20:03:57.817 回答
1

安装包:

PM> Install-Package EntityFramework
PM> Update-Package EntityFramework
PM> Install-Package MySql.Data.Entity

网页配置

<connectionStrings>
 <add name="DefaultConnection"
   providerName="MySql.Data.MySqlClient"
   connectionString="Data Source=localhost;port=3306;Initial Catalog=api_db;User Id=root;password=''"/>
</connectionStrings>

创建模型类

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace LiteRemit.Models
{
    [Table("customers")]
    public class CustomerModel
    {
        [Key]
        public int CustomerId { get; set; }
        public string Name { get; set; }
        public string Country { get; set; }
    }
}

创建模型上下文:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace LiteRemit.Models
{
    public class MySqlCon : DbContext
    {
        //MySql Database connection String
        public MySqlCon() : base(nameOrConnectionString: "DefaultConnection") { }
        public virtual DbSet<CustomerModel> Customers { get; set; }
    }
}

创建控制器类

using LiteRemit.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LiteRemit.Controllers
{
    public class HomeController : Controller
    {
        MySqlCon _con;
        public HomeController()
        {
            _con = new MySqlCon();
        }

        public ActionResult Index()
        {
            return View(_con.Customers.ToList());
        }
 }
}

代码添加查看页面:

@using LiteRemit.Models
@model IEnumerable<CustomerModel>

<table border="1">
 @foreach (var item in Model)
 {
  <tr>
   <td>@Html.DisplayFor(modelItem => item.CustomerId)</td>
   <td>
    @Html.DisplayFor(modelItem => item.Name)
   </td>
   <td>@Html.DisplayFor(modelItem => item.Country)</td>
  </tr>
 }
</table>
于 2017-05-19T07:06:14.303 回答