ef core操作mysql當前官方提供的最新版本是:8.0.1
需要安裝的包分別是:
MySql.Data
MySql.Data.EntityFrameworkCore
MySql.Data.EntityFrameworkCore.Design
其他的安裝包不用安裝,如果安裝了其他版本的依賴包則會報錯;
數據遷移需要導入Microsoft.EntityFrameworkCore.Design,版本是2.0.0;
嘗試了最新版本的2.1.1但是不行,在數據操作時候報錯。
接下來就可以連接mysql了
public class Blog { public int Id { get; set; } public string Title { get; set; } public DateTime CreateTime { get; set; } }
public class AppDbContext:DbContext { public AppDbContext() { } public DbSet<Blog> Blogs { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
//SslModel=None 這和ssl協議有關系。如果不指定會報錯 optionsBuilder.UseMySQL("server=localhost;user=root;database=test;port=3306;password=****;SslMode=None"); } }
1 class Program 2 { 3 4 static void Main(string[] args) 5 { 6 7 using (var db = new AppDbContext()) 8 { 9 db.Database.EnsureCreated(); 10 db.Blogs.Add(new Blog { Title = "http://blogs.msdn.com/adonet",CreateTime = DateTime.Now}); 11 var count = db.SaveChanges(); 12 Console.WriteLine("{0} records saved to database", count); 13 14 Console.WriteLine(); 15 Console.WriteLine("All blogs in database:"); 16 foreach (var blog in db.Blogs) 17 { 18 Console.WriteLine(" - {0}", blog.Title); 19 } 20 } 21 22 Console.ReadLine(); 23 } 24 }
運行結果如圖:

操作成功。
查詢數據庫結果如圖:

efcore操作mysql數據庫成功;
當前ef core mysql的包對數據遷移不是太好:
1.在首次創建遷移時,會把沒有遷移前生成的表在生成一遍:

解決方式是:
注釋掉已經存在的表和關系代碼。
2.首次進行遷移執行update-database的時候,會報錯:
MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'test.__efmigrationshistory' doesn't exit
解決方式是:
手動創建這個 'test.__efmigrationshistory' 表
CREATE TABLE `__EFMigrationsHistory`
(
`MigrationId` nvarchar(150) NOT NULL,
`ProductVersion` nvarchar(32) NOT NULL,
PRIMARY KEY(`MigrationId`)
);
然后執行update-database
這樣數據遷移就能完成了
