Fork me on Github

EF

一、EF

微软官方提供的ORM工具,ORM 是将数据存储从域对象自动映射到关系型数据库的工具。ORM主要包括3个部分:域对象、关系数据库对象、映射关系。ORM使类提供自动化CRUD,使开发人员从数据库API和SQL中解放出来。

ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。开发人员使用Linq语言,对数据库操作如同操作Object对象一样省事。

EF有三种使用场景:

1. 从数据库生成Class

2.由实体类生成数据库表结构

3.  通过数据库可视化设计器设计数据库,同时生成实体类

二、DbContext实例化

1.AddDbContext依赖注入

AddDbContext 将名为 MyToDoDbContext 的 DbContext 子类注册为 ASP.NET Core 应用程序服务提供程序(也称为 依赖关系注入容器)中的作用域服务。options.UseSqlServer 上下文配置为使用 SQL Server 数据库提供程序。

//注入数据库上下文
builder.Services.AddDbContext<MyToDoDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("ConnStr"))
);

 

MyToDoDbContext (数据库上下文)类必须公开具有 DbContextOptions<ApplicationDbContext> 参数的公共构造函数。 这是将 AddDbContext 的上下文配置传递到 DbContext 的方式。

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="options"></param>
        public MyToDoDbContext(DbContextOptions<MyToDoDbContext> options):base(options) 
        {

        }

 

然后,MyToDoDbContext 可以通过构造函数注入在 ASP.NET Core 控制器或其他服务中使用。

        private readonly MyToDoDbContext myToDoDbContext;
        public IndexController( MyToDoDbContext myToDoDbContext)
        {
            this.myToDoDbContext = myToDoDbContext;
        }

 

2.new DbContext 上下文

重写 OnConfiguring 方法来执行配置。

public class MyToDoDbContext : DbContext
{
    private readonly string _connectionString;

    public MyToDoDbContext (string connectionString)
    {
        _connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_connectionString);
    }
}

 

3.DbContextOptionsBuilder 创建 DbContextOptions 对象

public class MyToDoDbContext: DbContext
{
    public MyToDoDbContext(DbContextOptions<MyToDoDbContext> options)
        : base(options)
    {
    }
}
var contextOptions = new DbContextOptionsBuilder<ApplicationDbContext>()
    .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test")
    .Options;

using var context = new MyToDoDbContext(contextOptions);

 

posted @ 2025-05-18 22:00  昂昂呀  阅读(140)  评论(0)    收藏  举报