簡體   English   中英

帶有MySQL的ASP.NET MVC 4 EF5

[英]ASP.NET MVC 4 EF5 with MySQL

所以我剛拿起VS2012,我想用EF5啟動一個ASP.NET MVC 4應用程序。

我的主機沒有MSSQL所以我必須使用MySQL。

如何告訴我的應用程序它應該使用MySQL? (我要么使用devart MySQL連接器,要么使用mysql.com中的連接器)

您需要使用連接字符串DbProviderFactory和MySql Connector 6.5.4的自定義DatabaseInitializer設置配置。 我詳細介紹了使用EF5和MySql完整步驟,包括我博客上初始化程序的代碼 如果您需要ASP.Net成員資格提供程序解決方案之前曾被問過: ASP.NET的成員身份/角色提供程序? 我將在此處發布解決方案,以獲得完整的EF5 MySql解決方案。

MySql連接器當前不支持EF 5遷移,ASP.NET僅支持MS SQL上的SimpleMembership(默認為MVC4)而不支持MySql。 以下解決方案適用於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成員身份

DbProvider

<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步對得到實體框架-5-勞動與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”)
<add name="ConnectionString" providerName="MySql.Data.MySqlClient" connectionString="Data Source=127.0.0.1; port=3306; Initial Catalog=DbName; uid=root; pwd=*Password*;" />

安裝包:

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

Web.config文件

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM