AMEZING77

View the Project on GitHub AMEZING77/AMEZING77

[TOC]

Entity Framework

性能优化 AsNoTracking

悲观锁与乐观锁

EFCore

应用范围

初始化操作

创建Entity

public class Grade { public Grade() { Students = new List(); }

public int GradeId { get; set; } public string GradeName { get; set; }

public IList Students { get; set; } }

#### 创建配置DbContext
- 创建一个派生自`DbContext`的上下文类
- 配置实体`DbSet<T>`
- 重载`OnConfiguring()`方法,配置数据库连接字符串
- [Microsoft官方配置](https://learn.microsoft.com/zh-cn/ef/core/dbcontext-configuration/)
- [使用appsettings.json动态配置](https://www.entityframeworktutorial.net/efcore/db-connection-strings.aspx)
```Csharp
public class SchoolContext : DbContext
{       
    //entities
    public DbSet<Student> Students { get; set; }
    public DbSet<Grade> Grades { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=SchoolDb;Trusted_Connection=True;");
    }
} 

创建Migration

数据修改操作

在连接的情况下

using (var context = new SchoolContext())
{
  //增加数据
  var stdAdd = new Student()
  {
      FirstName = "Bill",
      LastName = "Gates"
  };
  context.Students.Add(stdAdd);
  context.SaveChanges();

  //修改数据
  var stdUpdate = context.Students.First<Student>(); 
  std.FirstName = "Steve";
  context.SaveChanges();

  //删除数据
  var stdDelete = context.Students.First<Student>();
  context.Students.Remove(stdDelete);
  context.SaveChanges();
}

在断连的情况下

//增加数据
var stdAdd = new Student()
{
    FirstName = "Bill",
    LastName = "Gates"
};
//修改数据
var stdUpdate = new Student()
{
    FirstName = "Steve",
    LastName = "Gates"
};
//删除数据
var stdDelete = stdUpdate;

using (var context = new SchoolContext())
{
  context.Add<Student>(stdAdd);
  context.Update<Student>(stdUpdate);
  context.Remove<Student>(stdDelete);
  context.SaveChanges();
}

【核心】数据查询

EFCore的默认规则

使用FluentApi配置/AnnotationAttributes

影子属性(Shadow Property)

原始SQL语句

使用存储过程(未完成,有待补充)

日志记录!!!

DB-First

Code-First

DB初始化

DB初始化工作流

alt text

提供Seed数据以供测试

alt text

Migration 自动与手动迁移