• 2.4.2 EF Core的介绍


    一、ORM(Object-Rational Mapping)

    • 对 SQL 语言进行封装,降低使用难度,多种 SQL 语言的抽象
    • 多出来的对事务、连接池、迁移、种子数据等一些功能
    • 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好

    二、Repository 仓储

    在领域层和数据映射层之间,像一个内存级别的领域对象集合

    • 为领域业务的单元测试提供替换点
    • 集中数据库访问逻辑

    三、UnitOfWork 工作单元

    一个工作单元在一个事务范围内保留所有对数据库的变更,在这个工作单元结束的时候一次性提交所有改动到数据库

    四、DB Context 与 DB Set

    DB Context(UnitOfWork 工作单元)

    DB Set(Repository 仓储)

    EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的 ORM 框架

    五、EF Core快速示例

    5.1创建 DbContext

     LighterDbContext

    namespace LighterApi.Data
    {
        public class LighterDbContext : DbContext
        {
            public LighterDbContext(DbContextOptions<LighterDbContext> options) : base(options)
            {
    
            }
    
            public DbSet<Project.Project> Projects { get; set; }
    
            public DbSet<Project.Member> Members { get; set; }
    
            public DbSet<Project.Assistant> Assistants { get; set; }
    
            public DbSet<Project.ProjectGroup> ProjectGroups { get; set; }
    
            public DbSet<Project.Task> Tasks { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
            }
        }
    }

    5.2配置连接字符串并且注入 DbContext

    需要将 server 地址修改为数据库服务器地址

    appsettings.json

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "ConnectionStrings": {
        "LighterDbContext": "server=127.0.0.1;port=7306;user=root;password=root123456@;database=lighter"
      },
      "AllowedHosts": "*"
    }

    Startup

    public IConfiguration Configuration { get; }
    
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    services.AddDbContext<LighterDbContext>(options =>
    {
        options.UseMySql(Configuration.GetConnectionString("LighterDbContext"));
    });
    
    services.AddControllers();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });

    5.3使用 DbContext 完成数据查询与插入 

    初始化数据库 ,注意在初始化以前确保正确配置了连接字符串,并且在startup.cs中添加了DbContext的注入

    // 安装dotnet tool ef工具 
    dotnet tool install --global dotnet-ef
    
    // 以下命令需要在api项目的目录下执行 
    // 在项目内安装 
    dotnet add package Microsoft.EntityFrameworkCore.Design
    
    //添加迁移文件
    dotnet ef migrations add Init
    
    // 更新数据库 
    dotnet ef database update

    创建控制器 ProjectController

    namespace LighterApi.Controller
    {
        [ApiController]
        [Route("api/[controller]")]
        public class ProjectController : ControllerBase
        {
            private readonly LighterDbContext _lighterDbContext;
    
            public ProjectController(LighterDbContext lighterDbContext)
            {
                _lighterDbContext = lighterDbContext;
            }
        }
    }

    查询列表 

    [HttpGet]
    public async Task<IEnumerable<Project>> GetListAsync(CancellationToken cancellationToken)
    {
        return await _lighterDbContext.Projects.ToListAsync(cancellationToken);
    }

    新增

    public async Task<ActionResult<Project>> CreateAsync([FromBody] Project project,
        CancellationToken cancellationToken)
    {
        project.Id = Guid.NewGuid().ToString();
        _lighterDbContext.Projects.Add(project);
        await _lighterDbContext.SaveChangesAsync(cancellationToken);
        return StatusCode((int) HttpStatusCode.Created, project);
    }

    修改启动端口,launchSettings.json

    "applicationUrl": "https://localhost:6001;http://localhost:6000",

    为了简化日期格式入参,添加 nuget 包 Microsoft.AspNetCore.Mvc.NewtonsoftJson

    services.AddControllers().AddNewtonsoftJson();
  • 相关阅读:
    格式化数字,将字符串格式的数字,如:1000000 改为 1 000 000 这种展示方式
    jquery图片裁剪插件
    前端开发采坑之安卓和ios的兼容问题
    页面消息提示,上下滚动
    可以使用css的方式让input不能输入文字吗?
    智慧农村“三网合一”云平台测绘 大数据 农业 信息平台 应急
    三维虚拟城市平台测绘 大数据 规划 三维 信息平台 智慧城市
    农业大数据“一张图”平台测绘 大数据 房产 国土 农业 信息平台
    应急管理管理局安全生产预警平台应急管理系统不动产登记 测绘 大数据 规划 科教 三维 信息平台
    地下综合管廊管理平台测绘 大数据 地下管线 三维 信息平台
  • 原文地址:https://www.cnblogs.com/duyao/p/14889286.html
Copyright © 2020-2023  润新知