ef core操作mysql

Posted whyld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ef core操作mysql相关的知识,希望对你有一定的参考价值。

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     }
View Code

运行结果如图:

操作成功。

查询数据库结果如图:

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

这样数据迁移就能完成了

以上是关于ef core操作mysql的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 基础知识

EF Core 数据库迁移(Migration)

ef.core Mysql

使用 Devart.MySql 将 EF6 升级到 EF Core 3

EF Core MySQL 数据库优先?

[小技巧]EF Core中如何获取上下文中操作过的实体