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<PluralizingTableNameConvention>();
            base.OnModelCreating(modelBuilder);
        }

        public virtual DbSet<city> Citys { get; set; }
    }
}

代码中使用:

List<city> aa = new List<city>();
                using (WorldDbContext db = new WorldDbContext())
                {
                      aa= db.Citys.Take(100).ToList();
                }

如果遇到:输入字符串的格式不正确。

一般是实体类字段和数据库中不匹配。

原文地址:https://www.cnblogs.com/runliuv/p/14673444.html