从零开始的.NET项目(一)配置EFCore

目标框架:.net6.0

操作系统:mac os

编译器:Rider

内容:配置EFCore,使用CodeFrist创建mssql数据库,并存入种子数据

数据库准备

如果使用的是vs编译器的话,其实就不用准备数据库了,直接用vs自带的数据库,嘎嘎好使😋。

但笔者使用的是mac,所以就用docker镜像来准备mssql了。具体操作后续再单开一节来详细介绍 再水一篇

运行起来数据库别忘了创建个库哈,等下连接数据库要用呢。


代码准备

安装nuget包

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

创建你的数据库Model文件

public class YourModel
{
    [Key] 
    public Guid Id { get; set; }

    [Required]
    public string Name { get; set; }  
}

上述代码中,属性需要有什么特性就在对应属性上标注特性就好,常用的有Key Require MaxLength Colume等,每个属性标注的特性在官方文档中有详细描述,就不过多赘述 我懒

创建数据库上下文

public class AppDBContext : DbContext
{
    public AppDBContext(DbContextOptions<AppDBContext> options)
        : base(options)
    {

    }

    //模型映射数据库表
    public DbSet<YourModel> YourModels { get; set; }
}

上述就是一个最简单的DbContext类,该类其实就是在创建数据模型和数据库表之间找到映射关系。

注入服务

首先将准备好的数据库连接字符串放入appsettings.json配置文件。如下

"ConnectionStrings": {
    "ConnectionString": "server=localhost; Database=数据库名; User Id=用户; Password=密码.;Encrypt=True;TrustServerCertificate=True;"
  }

然后注入服务,笔者使用的是.net6框架,直接将下方代码塞进Program.cs就好。

如果再早的框架,比如说.net3.1,就放进StartUp.cs文件,当然具体语法会有小改动。

builder.Services.AddDbContext<AppDBContext>(options =>
{
    //三种读取配置方式
    var connectionString = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", true, true)
        .Build()
        .GetConnectionString("ConnectionString");
    connectionString = builder.Configuration.GetConnectionString("ConnectionString");
    connectionString = builder.Configuration.GetSection("ConnectionStrings")["ConnectionString"];
    //connectionString = "server=localhost; Database=xiechengDb; User Id=SA; Password=sa123456.;Encrypt=True;TrustServerCertificate=True;";

    //调用sqlserver配置,加载数据库
    options.UseSqlServer(connectionString);
});

建库

使用vs编译器的话,直接用自带的程序包管理控制台就可以,如下

dotnet ef migrations 随便起个名字
otnet ed database update

mac的话其实指令是一样的,只不过运行位置稍有变化。如下图

 

在打开的终端里面输入上述指令就好。

做种

笔者本地运行项目目的主要是为了测试或者试一些新东西,所以一般就需要一些初始数据,这时候其实可以通过重写DbContext类的OnModelCreating()函数,在进行数据库迁移时,把种子数据写入数据库。

下面介绍两种方式,分别为代码写入和json文件写入。

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //代码写入
        modelBuilder.Entity<YourModel>().HasData(new YourModel()
        {
            Id = Guid.NewGuid(),
            Title = "ceshi"
        });

        //文件写入 找到你自己的json文件地址
        var jsonData = File.ReadAllText(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +
                                           @"data.json");
        IList<YourModel> dataList = JsonConvert.DeserializeObject<IList<YourModel>>(jsonData);
        modelBuilder.Entity<YourModel>().HasData(dataList);
        }

posted @ 2024-06-05 16:13  有了一个点子  阅读(12)  评论(0编辑  收藏  举报