Je viens donc de choisir VS2012 et je souhaite démarrer une application ASP.NET MVC 4 avec EF5.
Mon hôte ne dispose pas de MSSQL, je dois donc utiliser MySQL.
Comment dire à mon application qu'elle doit utiliser MySQL? (Je veux utiliser le connecteur devart MySQL ou celui de mysql.com)
Vous devez configurer votre configuration avec une chaîne de connexion, DbProviderFactory et un DatabaseInitializer personnalisé pour MySql Connector 6.5.4. J'ai détaillé la étape complète pour obtenir EF5 et MySql à jouer, y compris le code pour les initialiseurs sur mon blog . Si vous avez besoin d’une solution de fournisseur d’appartenance ASP.Net, la question a déjà été posée: Adhésion à ASP.NET/Fournisseurs de rôles pour MySQL? Je vais publier la solution ici également pour une solution complète EF5 MySql.
Le connecteur MySql ne prend actuellement pas en charge la migration EF 5 et ASP.NET ne prend en charge que SimpleMembership (valeur par défaut de MVC4) sur MS SQL et non sur MySql. La solution ci-dessous est pour Code First.
Les étapes sont les suivantes:
<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>
Si vous utilisez le connecteur MySql de NuGet (6.5.4), un initialiseur personnalisé est requis. Code disponible sur http://brice-lambson.blogspot.se/2012/05/using-entity-framework-code-first-with.html Ou sur http: // www .nsilverbullet.net/2012/11/07/6-étapes-à-obtenir-entité-cadre-5-travailler-avec-mysql-5-5/
Ajoutez ensuite ceci à la configuration
<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>
<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>
Faites fonctionner le AccountController et les vues:
@Html.Partial(“_LoginPartial”)
dans la vue _Layout partagée par @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*;" />
Installer le paquet:
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>
Créer une classe de modèle
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; }
}
}
Créer un contexte de modèle:
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; }
}
}
Créer une classe de contrôleur
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());
}
}
}
Code ajouter la page de vue:
@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>