赞
踩
配置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
通过命令安装是⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
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));
我这里创建了一个名叫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数据实体
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。