runliuv

runliuv@cnblogs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

.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();
                }

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

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

 

如果遇到这个报错:

“ex:The ADO.NET provider with invariant name 'MySql.Data.MySqlClient' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details.找不到请求的 .Net Framework Data Provider。可能没有安装。”

则需要在配置文件里增加一段:

<system.data>
    <DbProviderFactories>
        <remove invariant="MySql.Data.MySqlClient" />
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

 

局部配置文件:

<entityFramework>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        <!-- 这里是nuget 自动生成的 -->
        
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
  </provider></providers>
</entityFramework>
<!-- 这里是 手动加上的 -->
<system.data>
    <DbProviderFactories>
        <remove invariant="MySql.Data.MySqlClient" />
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

 

--

 

posted on 2021-04-18 14:43  runliuv  阅读(388)  评论(0编辑  收藏  举报