看了很多文章,嘗試了很多次總是進行不下去,整理一下,以便日後檢視。
1、建立ASP.NET MVC項目(EFCodeFirst)
1.1、右鍵點選引用選擇管理NuGet程式包下載下傳MySql.Data.Entity.dll(有依懶項,會自動下載下傳MySql.Data.dl 和 EntityFramework.dll)
1.2、修改Web.config檔案(如下圖)

2、建立類庫(EFCodeFirst.DataAccess)
2.1、右鍵添加-->建立項-->選擇資料-->選擇ADO.NET實體資料模型-->空Code First模型(也可以不用這一步,但DatabaseAccess.cs檔案需要自己建立)
2.1、右鍵點選引用選擇管理NuGet程式包下載下傳MySql.Data.Entity.dll(有依懶項,會自動下載下傳MySql.Data.dl 如下圖)
2.2、修改檔案 DatabaseAccess.cs
修改之前:
修改之後:
代碼如下:
namespace EFCodeFirst.DataAccess
{
using IdentityAuth.Common;
using IdentityAuth.Model.Sys;
using MySql.Data.MySqlClient;
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Linq;
public class DatabaseAccess : DbContext
{
#region 構造函數和初始化
private static string connectionStr { get; set; }
private static DbConnection GetConnection()
{
if (String.IsNullOrEmpty(connectionStr))
connectionStr = ConfigHelper.GetConnectionStr("EFCodeFirst");
if (String.IsNullOrEmpty(connectionStr))
throw new Exception("資料庫連接配接字元串為空,請在Config檔案裡配置");
DbConnection dbConnection = new MySqlConnection() { ConnectionString = connectionStr };
return dbConnection;
}
public DatabaseAccess() : base(DatabaseAccess.GetConnection(), true)
{
Database.SetInitializer<DatabaseAccess>(null);
}
#endregion
#region 系統表
/// <summary>
/// 系統使用者資訊
/// </summary>
public DbSet<SysUserEntity> UserEntities { get; set; }
/// <summary>
/// 角色資訊
/// </summary>
public DbSet<SysRoleEntity> RoleEntities { get; set; }
/// <summary>
/// 系統菜單資訊
/// </summary>
public DbSet<SysMenuEntity> MenuEntities { get; set; }
/// <summary>
/// 角色權限資訊
/// </summary>
public DbSet<SysRoleAuthEntity> RoleAuthEntities { get; set; }
/// <summary>
/// 角色使用者資訊
/// </summary>
public DbSet<SysRoleUserEntity> RoleUserEntities { get; set; }
#endregion
}
}
2.3、修改App.config檔案(如下圖)
App.config檔案如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<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, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>
3、遷移
3.1、打開程式包管理控制器,預設項目選擇 EFCodeFirst.DataAccess(也就是CodeFirst遷移目錄,如下圖)
3.2、添加遷移配置 Enable-Migrations(生成以下檔案并會出現錯誤,如圖)
3.3、解決3.2出現的錯誤,修改生成檔案 Configuration.cs(如下圖)
代碼如下:
namespace EFCodeFirst.DataAccess.Migrations
{
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.History;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<EFCodeFirst.DataAccess.DatabaseAccess>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
SetHistoryContextFactory("MySql.Data.MySqlClient", (conn, schema) => new MySqlHistoryContext(conn, schema));
}
protected override void Seed(EFCodeFirst.DataAccess.DatabaseAccess context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data.
}
}
public class MySqlHistoryContext : HistoryContext
{
public MySqlHistoryContext(DbConnection connection, string defaultSchema)
: base(connection, defaultSchema)
{}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<HistoryRow>().Property(h => h.MigrationId).HasMaxLength(100).IsRequired();
modelBuilder.Entity<HistoryRow>().Property(h => h.ContextKey).HasMaxLength(200).IsRequired();
}
}
}
3.4、添加一個合并遷移指令行:Add-Migration [Name](eg:Add-Migration Add_Base_Table) Name 為一個合并的名稱,自定義,最好不重複
3.5、生成SQL:Update-Database -Script(如果不需要SQL可不用執行)
3.6、遷移到資料庫:Update-Database