記錄在 .NET 專案中使用 EF 6.0 Code First 模式,配合 MySQL Connector/Net 6.9.5,實現實體類映射、自動建表、Code First Migrations 版本控制、Fluent API 進階映射的完整流程。
Install-Package EntityFramework -Version 6.0.0MySql.Data、MySql.Data.Entity.EF6。public class Blog {
public int BlogId { get; set; }
public string Name { get; set; }
public virtual List Posts { get; set; } // 導航屬性,啟用延遲加載
}
public class Post {
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}

public class BloggingContext : DbContext {
public BloggingContext() : base("MySqlServer") { } // 連接字符串名稱
public DbSet Blogs { get; set; }
public DbSet Posts { get; set; }
}

App.config / Web.config 中連接字符串:
using (var db = new BloggingContext()) {
db.Blogs.Add(new Blog { Name = "Another Blog" });
db.SaveChanges();
foreach (var blog in db.Blogs) Console.WriteLine(blog.Name);
}

運行後 MySQL 自動創建數據庫、表、外鍵關係。


Enable-MigrationsMigrations\Configuration.cs。Configuration.cs 註冊 MySQL SQL 生成器(關鍵步驟):SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());

Blog 添加 Url 屬性。Add-Migration AddUrl → 生成遷移類。
Update-Database -Verbose → 更新數據庫結構。

在 OnModelCreating 中配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity()
.Property(b => b.Name)
.IsRequired()
.HasMaxLength(100);
modelBuilder.Entity()
.Property(p => p.Title)
.HasColumnType("varchar")
.HasMaxLength(200);
base.OnModelCreating(modelBuilder);
}

再次 Add-Migration + Update-Database 完成結構同步。


MSDN 官方指南:Code First Migrations with MySQL