写点什么

CodeFirst

作者:青柚1943
  • 2023-03-14
    湖南
  • 本文字数:1321 字

    阅读完需:约 4 分钟

安装依赖

EntityFrameworkCore package

1、创建并配置模型

EF Core 使用元数据模型来描述如何将应用程序的实体类型映射到基础数据库。一般有两种方式:使用 fluent API 配置模型和使用数据注释来配置模型。

前者请参考微软文档,如下图所示:

fluent API


DbContext 生存期、配置和初始化

appsettings.json 中添加 sqlserver 连接字符串(以 localdb 为例)

  "ConnectionStrings": {    "LoacalDbConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=AcDb;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"  }
复制代码

在管道中注入 DbContext

public static class ServiceCollectionExtensions{    public static IServiceCollection UseSqlServer(this IServiceCollection services, IConfiguration configuration)    {        string sqlConn = configuration.GetConnectionString("LoacalDbConnection") ?? string.Empty;        services.AddDbContext<AuthorityDbContext>(option => option.UseSqlServer(sqlConn));        return services;    }}
复制代码

注意:这里 AddDbContext 默认生命周期是 ServiceLifetime.Scoped(为什么必须是 Scoped,让我们来看看 ChatGPT 怎么说)

AddDbContext




Program.cs

builder.Services.UseSqlServer(builder.Configuration);
复制代码

此示例将名为 AuthorityDbContext 的 DbContext 子类注册为 ASP.NET Core 应用程序服务提供程序(也称为依赖关系注入容器)中的作用域服务。 上下文配置为使用 SQL Server 数据库提供程序,并将从 ASP.NET Core 配置读取连接字符串。

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


using Microsoft.EntityFrameworkCore;using AuthorityCenterService.Model.Group;
namespace AuthorityCenterService{ public class AuthorityDbContext: DbContext { public AuthorityDbContext(DbContextOptions<AuthorityDbContext> options) : base(options) { }

public DbSet<UserGroup> UserGroup { get; set; } }}
复制代码


用特性(数据注释)来创建数据模型(用户组)

using Microsoft.EntityFrameworkCore;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;
namespace AuthorityCenterService.Model.Group{ [Table("UserGroup")] public class UserGroup { [Key, Required] public Guid Id { get; set; }
[MaxLength(80),Unicode] public string? Name { get; set; } public int Status { get; set; }
public DateTime? CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
[Unicode,MaxLength(20)] public string? UpdatedBy { get; set; } }}
复制代码

具体规则可参考微软文档:data-annotations


添加、删除迁移

Add-Migration InitialCreate

Remove-Migration


将数据库更新为最新迁移

Update-Database



用户头像

青柚1943

关注

生命不息,代码不止。 2020-08-04 加入

老街坊,小弄堂,是属于那年代白墙黑瓦的淡淡的忧伤。

评论

发布
暂无评论
CodeFirst_ORM_青柚1943_InfoQ写作社区