EF Core 的基本使用及常见的坑

EF Core 的基本使用及常见的坑

1. EF Core 是什么

简单来说,就是实现代码中的类到数据库中表的映射的一种方法。
宝啊,是不是觉得我才开篇就鬼话连篇。
举个例子,假设我们要创建一个名为employees的表,包含id、name、age和salary列,应该执行如下sql语句:

CREATE TABLE employee (  
    id INT PRIMARY KEY,  
    name VARCHAR(50),  
    age INT,  
    salary DECIMAL(10, 2)  
);

这种写法很不方便,如果表很多,或者想要修改表会很不方便。
对于程序员而言,我们对于类很熟悉

    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public float Salary { get; set; }
    }

EF core就是能够将像上面的类转换成表,说的装逼一点就是将类映射到数据库表中,这样是不是比你写sql语句简单太多了。
当然,你可能会问,C# 中的int对应数据库中什么数据类型,string又对应什么类型,宝啊,你操这个心干嘛?EF Core 会自己转换的。宝啊,你可能又会问映射这种方式靠谱吗?会不会效率很低?宝啊,你觉得设计这个框架的人会比你傻吗?

2.怎么使用EF core

上面已经写好类了,是不是可以直接映射了。还不行,因为数据库怎么知道C#代码,C#代码也不认识数据库,它们两个想要建立连接,还需要通过一个桥梁DbContext。
DbContext是 DataBase Context的简写,翻译过来就是数据库上下文,这又是什么鬼?你就它当作一个名词来看待,它的作用是用来配置如何连接或者操作数据库的。DbContext官方已经写好了,我们直接继承该类使用。

class MyDbContext : DbContext
{
    //摘要:
    //     把DbSet Books { get; set; },理解成是一个容器
    //     用来存放Book类型的实体,该实体名字叫做Books
    //     该容器的作用是用来实现实体类到数据库表的映射
    //     映射的时机: Program.cs 里调用 await ctx.SaveChangesAsync();
    public DbSet<Employee> Books { get; set; }
    public DbSet<Dog> Dogs { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        摘要:下面的连接字符串是用来连接sqlservr用的:
             连接SQLserver需要nuget安装 Microsoft.EntityFrameworkCore.SqlServer 
             以下是代码:
        //string connStr = "Server=.;Database=demo1;Trusted_Connection=True;Encrypt=false;";
        //optionsBuilder.UseSqlServer(connStr);


        //摘要:下面的连接字符串是用来连接mysql用的
        //      同时还需要指定mysql的版本号
        //     连接MySQL需要nuget安装 Pomelo.EntityFrameworkCore.MySql 
        //      
        string MySqlConneStr = "server=localhost;user=root;password=123456;database=demo1";
        //特别注意:此处使用的是:Pomelo.EntityFramework.MySql包.
        var serverVersion = new MySqlServerVersion(new Version(8, 0, 34));
        optionsBuilder.UseMySql(MySqlConneStr, serverVersion);


    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
    }
}

现在是2024.02.01 0:14,好困啊,我先睡觉

你可能感兴趣的:(C#,c#)