首页 > 其他分享 >EFCore和EF6的使用和区别

EFCore和EF6的使用和区别

时间:2024-06-06 21:44:52浏览次数:17  
标签:Console WriteLine 区别 get EF6 user EFCore public string

1、Sqlserver是微软的亲儿子,很少会报错,EF报错问题最多出现在Mysql。以下使用mysql为例子
C#一般很形象,带Core的都是.Net Core平台的。
所以在.NetFramework平台我们使用EF6,也就是EntityFramework6
在.NetCore平台使用EFCore
2、直接上代码 (.Net6)

  internal class Program
  {
      static void Main(string[] args)
      {
          using (var context = new MyDbContext())
          {
              try
              {
                  // 查询第一条用户数据
                  var user = context.Users.FirstOrDefault();

                  if (user != null)
                  {
                      Console.WriteLine("用户ID: {0}", user.Id);
                      Console.WriteLine("用户名: {0}", user.Name);
                      Console.WriteLine("用户邮箱: {0}", user.Email);
                  }
                  else
                  {
                      Console.WriteLine("没有找到用户数据。");
                  }
              }
              catch (Exception ex)
              {
                  Console.WriteLine("发生错误: " + ex.Message);
              }
          }
          Console.ReadLine();
      }

  }

  [Table("userinfo")]
  public class User
  {
      public int Id { get; set; }
      public string Name { get; set; }
      public string Email { get; set; }
  }

  public class MyDbContext : DbContext
  {
     /* public MyDbContext(DbContextOptions<MyDbContext> option) : base(option)
      {

      }*/
      private  string GetConnectionString()
      {
          // 返回适用于MySQL的连接字符串
          return "server=localhost;database=mvvmlighteap;user=root;password=1314;";
      }

      protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
      {
          base.OnConfiguring(optionsBuilder);
          optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
      }
      public string connectionString => GetConnectionString();
      public DbSet<User> Users { get; set; }

  }

.Net Core平台一般很少报错,直接Nuget安装两个类库就行

 Pomelo.EntityFrameworkCore.MySql
 Microsoft.EntityFrameworkCore

3、.NetFramework使用EF6

internal class Program
{
    static void Main(string[] args)
    {
        using (var context = new MyDbContext())
        {
            try
            {
                // 查询第一条用户数据
                var user = context.Users.FirstOrDefault();

                if (user != null)
                {
                    Console.WriteLine("用户ID: {0}", user.Id);
                    Console.WriteLine("用户名: {0}", user.Name);
                    Console.WriteLine("用户邮箱: {0}", user.Email);
                }
                else
                {
                    Console.WriteLine("没有找到用户数据。");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("发生错误: " + ex.Message);
            }
        }
        Console.ReadLine();
    }
}

[Table("userinfo")]
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

public class MyDbContext : DbContext
{
    public MyDbContext() : base("MyDbContext")
    {
     
    } 
    public DbSet<User> Users { get; set; }
}

它是一定要配置web.config或者App.config的
需要注意的是,Mysql.Data.Entity已经弃用了,使用MySql.Data.EntityFramework
在以前需要注意MySql.Data和Mysql.Data.Entity的版本号一致,现在
MySql.Data和MySql.Data.EntityFramework的版本号一致
你要明白谁是微软的亲儿子,是sqlserver所以.config文件的默认值是

 <entityFramework>
   <providers>
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>
 </entityFramework>

需要改成

 <entityFramework>
   <providers>    
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.4.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
</providers>
 </entityFramework>

注意你的版本号
当你安装MySql.Data.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.4.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
	</DbProviderFactories>
</system.data>

如果没有需要加上

标签:Console,WriteLine,区别,get,EF6,user,EFCore,public,string
From: https://www.cnblogs.com/guchen33/p/18236072

相关文章

  • 字符数组VS字符串(一文搞懂有什么区别)
    当你在C++的程序中,经常会遇到两种字符串的表达方法,一种是以字符数组的方式,还有用string的,这二者到底有什么不同?下文将会帮彻底弄懂。因为许多函数参数当需要传入字符串的时候,有的代码中使用指向字符数组的指针来传递字符串,其实C++中传入字符数组,就相当于传入一个指向该数......
  • 数组array 和 &array的区别
    问题对于数组array和&array有什么区别呢?先说答案array:指向数组第一个数地址的指针&array:指向整个数组地址的指针所以直接打印的话,地址是一样的.但是如果+1的话,那么array是增加sizeof(int)大小,&array是增加sizeof(int)*array.size()测试#include<iost......
  • 函数重载和模板的区别与联系
    函数重载和模板的区别与联系函数重载(overloaded):定义函数名相同而形参列表(个数,类别)不同的多个函数,这些函数被称为重载函数,重载函数通常执行的操作非常类似,如打印不同的输入对象。调用函数时编译器根据实参的类型确定调用哪个重载函数。函数模板(template):实际上是建立一......
  • 路由器 交换机 集线器的区别
    三者对比集线器交换机路由器IP支持不支持不支持支持MAC地址支持不支持支持支持OSI中的层次物理层数据链路层网络层是够可以作为网关否否是集线器:只是做数据的转发,并且是广播方式的转发,一个网口输入一份数据,会被分发到其他所有端口。交换机:......
  • 百兆网口和千兆网口指示含义的区别
    网口指示灯状态:千兆网口和百兆网口灯的含义不同千兆网口:根据核心板提供给ETH0_LED1、ETH0_LED1的信号当与其连接的是百兆网口PHY芯片的设备时,LED1(绿灯)亮,LED2(黄灯)不亮当有数据发送或者接收时,闪烁;当与其连接的是千兆网口PHY芯片的设备时,LED2(黄灯)亮,LED1(绿灯)不亮,当有数据发送或......
  • MDZ UPnP和端口映射 区别
    DMZ(demilitarizedzone):可以简单理解成把网关的全端口转发到指定内网主机上,只能指定一台主机。这是一种静态全端口映射。这个协议只要早网关开启就行了。UPnP(UniversalPlugandPlay):这个协议的目的是动态的映射网关的指定端口到指定主机上,可以一把网关的不同端口映射到不同......
  • 详解C和C++的区别
    在学习C++和C语言的过程中,总会分不清两者的区别。在此,做一个总结梳理。首先需要明白的是C语言是面向过程语言(分析解决问题的步骤,并将这些步骤一步一步的实现,使用的时候依次调用);C++是面向对象语言(把问题分解成各个对象,描述某个对象在整个解决问题的步骤中的行为)。面向过程......
  • Session 和 Cookie 区别
    Session和Cookie是Web开发中用于存储用户相关数据的两种常见机制,它们之间有一些关键区别:Cookie:定义:Cookie是由服务器发送到用户浏览器并存储在用户计算机上的小型文本文件,用于在用户访问同一网站时进行数据存储和交换。存储位置:Cookie存储在用户的浏览器中,通常以文......
  • HttpContext.Current 和 IHttpContextAccessor 的区别
    "HttpContext.Current"和"IHttpContextAccessor"是两个不同的方式,用来访问当前的HTTP上下文(即与HTTP请求相关的信息,如请求、响应、用户、会话等)。"HttpContext.Current"定义:"HttpContext.Current"是在ASP.NET(旧版.NETFramework)中用于访问当前HTTP上下文的静态属......
  • DP 和 HDMI 哪个比较好?它们的区别有哪些?
    什么是DPDisplayPort(DP)是一种数字显示接口标准,由视频电子标准协会(VESA)开发。DP接口主要用于计算机连接显示器,但也被广泛应用于其他设备,如电视和投影仪。DP支持高分辨率和高刷新率,同时可以传输音频和数据信号。什么是HDMIHDMI(High-DefinitionMultimediaInterface)是一......