.Net6 配置EntityFrameworkCore

本文介绍了如何在.NETCore6项目中使用EntityFramework(EF)创建一个独立的Models类库,用于存放实体模型。首先新建一个类库添加EFSqlServerNuGet包,接着定义实体类如Users,然后创建DbContext类进行数据库上下文配置。此外,文章还提到了通过EFTools自动化生成实体类的命令,并展示了如何在项目中配置DI以注入DbContext。最后,通过创建一个基础控制器(BaseController),简化了其他控制器对数据库的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置EF时候我们可以选择新建一个Models类库和项目分离出来,也可以直接在项目里面新建一个Models文件夹,进行存放我们的实体。上述两个方案中,第一个比第二个复杂一点点,所以,我就拿第一个做示例。创建一个与项目分离的实体层。

一、新建一个类库,用来存放我们的实体

在类库项目里面需要添加NutGet包⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

Microsoft.EntityFrameworkCore.SqlServer

 二、添加我们的实体

我这里用Users做一个示例里面就是单纯的和数据库字段对应的实体模型

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Models
{
    [Table("Users")]
    public class Users
    {
        /// <summary>
        /// id
        /// </summary>
        [Key]
        public Guid Uid { get; set; } = Guid.Empty;
        /// <summary>
        /// 名称
        /// </summary>
        public string UName { get; set; } = string.Empty;
        /// <summary>
        /// 密码
        /// </summary>
        public string Pwd { get; set; } = string.Empty;
    }
}

三、新建一个类,书写我们的上下文

using Microsoft.EntityFrameworkCore;

namespace Models
{
    public class DbEntitys: DbContext
    {
        /// <summary>
        /// 配置连接字符串,每次访问数据库之前会自动执行此方法,在这里配置连接字符串
        /// 相当于连接前事件
        /// 使用 IOC 注入的方式不实现此方法
        /// </summary>
        /// <param name="builder"></param>
        protected override void OnConfiguring(DbContextOptionsBuilder builder)
        {
            // 连接字符串
            string ConnString = "连接字符串";

            // 连接SqlServer
            builder.UseSqlServer(ConnString);

            // 连接MySql
            //builder.UseMySql(ConnString,new MySqlServerVersion(new Version()));
        }

        /// <summary>
        /// 默认构造函数 使用方法与原来一样
        /// </summary>
        public DbEntitys() : base() { }

        /// <summary>
        /// 通过IOC
        /// </summary>
        /// <param name="options"></param>
        public DbEntitys(DbContextOptions<DbEntitys> options) : base(options)
        { }


        #region 表映射
        //把我们的实体给映射一下,方便我们后面调用,有几个实体就映射几个实体,写法一样
        public DbSet<Users> Users { get; set; }
        //public virtual DbSet<Tab2> Tab2 { get; set; }
        #endregion
    }
}

四、同上一样,只不过是自动生成

上面操作弄好之后我们的类库就弄完了,上面方法是需要自己手写的,大家直接复制我的就行,大家如果不想手写的话,也可以让他自己生成。自己生成的话,需要下载的NutGet包就会多一点。需要装一个

Microsoft.EntityFrameworkCore.Tools

 通过命令安装是⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

  1. 打开 Visual Studio,并打开您的项目。
  2. 打开控制台窗口("视图" -> "其他窗口" -> "包管理器控制台")
  3. 在控制台窗口中,输入以下命令并按 Enter 键:

Install-Package Microsoft.EntityFrameworkCore.Tools

 安装完成后,您可以使用 Scaffold-DbContext 命令生成实体类。例如,以下命令将从名为 MyDatabase 的 SQL Server 数据库中生成实体类并将其放在 Models 文件夹中:

Scaffold-DbContext "Server=myServerAddress;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
 

 上述命令是生成所有表实体,如果不想生成所有表实体,可以生成单个实体

Scaffold-DbContext "Server=myServerAddress;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables MyTable
 

 这将从名为 MyDatabase 的 SQL Server 数据库中生成 MyTable 表的实体类,并将其放在 Models 文件夹中。您可以将 MyTable 替换为要生成实体类的表名

 五、配置项目

在项目里,我这里用的是.Net Core 6版本的项目,我这里就用这个演示

在上面几个步骤弄好类库之后,我这里需要在Program里面进行注入一下,通过IOC容器大同和数据库的连接

在Program里面注入一下⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

var builder = WebApplication.CreateBuilder(args);
//写到这句下面
//⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
var ConnString = "连接字符串";
//注入
builder.Services.AddDbContext<DbEntitys>(x => x.UseSqlServer(ConnString));

1、新建一个控制器用来写构造函数方便我们调用

我这里创建了一个名叫BaseController的控制器

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Models;

namespace RedisCeShi.Controllers
{
    public class BaseController : ControllerBase
    {

        /// <summary>
        /// 数据库操作实例
        /// </summary>
        public readonly DbEntitys _db;

        /// <summary>
        /// 构造函数获取实例
        /// </summary>
        /// <param name="db"></param>
        public BaseController(DbEntitys db)
        {
            _db = db;
        }
    }
}

在里面写上我们的构造函数,我们哪个控制器需要操作数据库就继承一下这个控制器,然后生成一下构造函数就行了

如下:⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using Models;//添加引用
using RedisCeShi.Common;
using RedisCeShi.Model;

namespace RedisCeShi.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    //继承我们刚才写的哪个控制器
    public class ZSGCeShiController : BaseController
    {
        //生成构造函数,打通连接
        public ZSGCeShiController(DbEntitys db) : base(db)
        {
        }

        /// <summary>
        /// 测试
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<ActionResult> GetUsers()
        {   //实现调用
            var list = await _db.Users.ToListAsync();
            return Ok(list);
        }

    }
}

以上就是.Net Core 6连接数据库的分离操作。写完后,我们别的控制器只需要继承BaseController控制器就可以了,就可以拿到_db数据实体

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值