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 classBlog
{public int Id { get; set; }public string Title { get; set; }public DateTime CreateTime { get; set; }
}
public classAppDbContext:DbContext
{publicAppDbContext()
{
}public DbSet Blogs { get; set; }protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//SslModel=None 这和ssl协议有关系。如果不指定会报错
optionsBuilder.UseMySQL("server=localhost;user=root;database=test;port=3306;password=****;SslMode=None");
}
}
1 classProgram2 {3
4 static void Main(string[] args)5 {6
7 using (var db = newAppDbContext())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 indb.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
这样数据迁移就能完成了