• ef core


    ef core 简介

    ORM:object relational mapping 让开发者用对象操作的形式操作关系型数据库

    有那些orm:efcore dapper sqlsuger freesql

    ef core 搭建

    1. 安装:install-package microsoft.entityframeworkcore.sqlserver
    2. 搭建:建立实体类 建立DbContext
    3. 安装:package microsoft.entityframeworkcore.tools
    4. 生成:add-migration name
    5. 修改表结构:fluntapi

    ef core 增删改查

    /// 增
    // 1.使用dbcontext类
    using(MyDbContext dbContext = new MyDbContext())
                {
    // 2.声明实体类,填充数据
                    Book book1 = new Book();
                    book1.Title = "高数";
                    book1.PubTime = new DateTime(2022, 4, 14);
                    book1.Prise = 40;
    // 3.添加入dbContext,
                    dbContext.Add(book1);
    // 4.更新状态  
                    dbContext.SaveChanges();
                }
    /// 查
      using (MyDbContext dbContext = new MyDbContext())
                {
                   var bookResult =  dbContext.Books.Where(p => p.Id == 1);
    
                    foreach (var item in bookResult)
                    {
                        Console.WriteLine(" ID "+ item.Id + " Title " + item.Title + " PubTime " + item.PubTime + " Prise " + item.Prise);
                    }
                }
    
    /// 改
     using (MyDbContext dbContext = new MyDbContext())
                {
                   Book book =  dbContext.Books.Where(b => b.Id == 1).FirstOrDefault();
                    book.Title = "高数-改1";
                    await dbContext.SaveChangesAsync();
                }
    
    /// 删
     using (MyDbContext dbContext = new MyDbContext())
                {
                    var bookResult = dbContext.Books.Single(p => p.Id == 1);
    
                    dbContext.Books.Remove(bookResult);
    
                    await dbContext.SaveChangesAsync();
                }
    
    
    

    目前官方的的批量修改和删除多条数据的方法,都是查出来在一条条update delete

    可以试用 Zack.EFCore.Batch 使用方法可查看 https://github.com/yangzhongke/Zack.EFCore.Batch; 但其无法保证数据的状态一致,在使用增删改的操的之后,再新建一个dbcontext

    FluentAPI 使用建议

    ercore默认的规则:约定大于配置

    两种配置方式

    将配置以特性(annotation)的形式标注在实体类中

    简单 耦合

    [Table("T_Books")]
    public class Book{}
    

    2.FluentAPI

    bulider.ToTable("T_Books");
    

    复杂 解耦

    可以混用,但不推荐

    使用efcore高级特性的时候谨慎,尽量不要和业务混合在一起,不如ignore、shadow、table splitting等

    EF Core中主键的使用

    efcore支持多种主键生成策略:自增,guid hi/li算法

    自增:

    优点 简单

    缺点 数据库迁移以分布式系统比较麻烦,并发性能差4

    guid

    优点:适用于分布式系统,在多个数据库数据合并的时候简单

    缺点:占用磁盘空间大,在把guid类型做主键的时候,不能把主键设为聚集索引,聚集索引是按照顺序保存主键的,mysql主键是强制使用聚集索引的

    使用:可以让自增和guid混合使用,自增为物理主键,guid为混合主键

    Hi/Lo算法

    优化自增列,主键由两部分组成,高位(Hi)低位(Li);数据库生成高高位,低位本地生成,两个高位之间隔若干值 ,但不是efcore标准

    magrations

    使用迁移脚本可以对当前数据库进行向上迁移和向下迁移,

    除非有特殊需要,否则不要删除magrations文件夹下的代码

  • 相关阅读:
    第 2 章 OpenStack 架构
    第 2 章 OpenStack 架构
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
  • 原文地址:https://www.cnblogs.com/alideluobo/p/16153667.html
Copyright © 2020-2023  润新知