web-dev-qa-db-ja.com

MySQLを使用したASP.NET MVC 4 EF5

だから私はVS2012を入手したばかりで、EF5でASP.NET MVC 4アプリを起動したいと思います。

私のホストにはMSSQLがないため、MySQLを使用する必要があります。

MySQLを使用する必要があることをアプリに伝えるにはどうすればよいですか? (私はdevart MySQLコネクタまたはmysql.comのコネクタを使用したい)

16
kasperhj

MySql Connector 6.5.4の接続文字列、DbProviderFactory、およびカスタムDatabaseInitializerを使用して構成をセットアップする必要があります。私は EF5とMySqlをプレイするための完全な手順(ブログの初期化コードを含む) について詳しく説明しました。 ASP.Netメンバーシッププロバイダーソリューションが必要な場合は、以前に尋ねられました: ASP.NETメンバーシップ/ MySQLのロールプロバイダー? EF5 MySqlソリューションの完全なソリューションもここに投稿します。

MySqlコネクタは現在EF 5移行をサポートしておらず、ASP.NETはMySqlではなくMS SQLのSimpleMembership(MVC4デフォルト)のみをサポートしています。以下の解決策はコードファースト用です。

手順は次のとおりです。

  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.html または http:// 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アカウントコントローラー、アカウントモデル、アカウントビューフォルダー、および_LogOnPartial共有ビューをMVC 4アプリケーションにコピーします。
  4. 共有_Layoutビューの@Html.Partial(“_LoginPartial”)@Html.Partial(“_LogOnPartial”)に置き換えます
26
agilejoshua
<add name="ConnectionString" providerName="MySql.Data.MySqlClient" connectionString="Data Source=127.0.0.1; port=3306; Initial Catalog=DbName; uid=root; pwd=*Password*;" />
1
Neha Katoch

インストールパッケージ:

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>
0
Ram Pukar