配置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
通过命令安装是⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
- 打开 Visual Studio,并打开您的项目。
- 打开控制台窗口("视图" -> "其他窗口" -> "包管理器控制台")
- 在控制台窗口中,输入以下命令并按 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数据实体