C#.NET MySql8.0 EF db first
.net framework 4.5.2,winform 程序。
mysql 8.0
1.nuget中引用EntityFramework,6.4.4
2.nuget中引用MySql.Data.EntityFramework,8.0.18。(如果是设计器模式 ADO.NET 实体数据模型,不用要 8.0.23 否则会出现2次数据库名的情况)
引用之后,可以观察到app.config中加入了2个provider:
<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.EntityFramework, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">provider> providers>
在此上添加个连接:
<connectionStrings> <add name="WorldDbContext" connectionString="server=192.168.2.167;user id=root;password=some;database=world" providerName="MySql.Data.MySqlClient" /> connectionStrings>
以演示数据库:world,city表为例,添加实体类:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MySqlDbFirst.DbModel { public class city { [Key] //主键 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增 public int ID { get; set; } public string Name { get; set; } public string CountryCode { get; set; } public string District { get; set; } } }
添加DbContext:
using MySqlDbFirst.DbModel; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; namespace MySqlDbFirst.DbCon { public class WorldDbContext: DbContext { public WorldDbContext() : base("name=WorldDbContext") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //移除复数表名 modelBuilder.Conventions.Remove(); base.OnModelCreating(modelBuilder); } public virtual DbSet Citys { get; set; } } }
代码中使用:
Listaa = new List (); using (WorldDbContext db = new WorldDbContext()) { aa= db.Citys.Take(100).ToList(); }
如果遇到:输入字符串的格式不正确。
一般是实体类字段和数据库中不匹配。