使用 Core6.0 创建 EF Core
Database First 创建 EF Core (sql service)
-
添加NuGet 包的引用
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer.Design已弃用 -
在程序包管理器控制台执行(工具-NuGet包管理器-程序包管理器控制台)
Scaffold-DbContext "Server=.;User Id=sa;Password=123456;Database=HaircutDB;Persist Security Info=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f
成功创建完成后会自动创建上下文类及模型类
- 连接串动态配置
自动创建模型时会在上下文类里创建一条链接数据库的字符串 上文中的黄色提醒 就是因为 该字符串不能存在上下文类中
-
将数据上下文中固定连接串去掉
-
在appsettings.json中重新配置链接字符串
//链接sql service数据库
"ConnectionStrings": {
"SqlServerConnection": "Server=.;User Id=sa;Password=123456;Database=HaircutDB;Persist Security Info=True;"
},
获取到自定义配置的节点的配置
//通过配置文件获取信息
var con1 = builder.Configuration["msghello"];
Console.WriteLine("第一种方法读取配置文件信息:" + con1);
//2.
var con2 = builder.Configuration.GetValue<string>("msghello");
Console.WriteLine("第二种方法读取配置文件信息:" + con2);
- 配置服务器的DI容器
获取到刚刚配置的链接字符串 在入口函数文件去获取链接并且通过DI注册配置上下文类
//获取链接字符串
var conn = builder.Configuration.GetConnectionString("conn");
//配置服务器的DI[依赖注入](配置上下文类)
builder.Services.AddDbContext<HaircutDBContext>(options => options.UseSqlServer(conn));
//输出打印
Console.WriteLine(conn);
5. 配置完成,可以进行使用
错误
使用时如果出现证书问题 可以直接信任 或者 链接字符串 后面添加Encrypt=false
Scaffold-DbContext "Server=.;User Id=sa;Password=123456;Database=HaircutDB;Persist Security Info=True;Encrypt=false"Microsoft.EntityFrameworkCore.SqlServer -o Models -f
Core First 创建 EF Core
-
导入NuGet包
使用命令行直接导入包(-version 6.0.25 需要安装的版本[与core的版本要相符])
Install-Package Microsoft.EntityFrameworkCore -version 6.0.25
Install-Package Microsoft.EntityFrameworkCore.SqlServer -version 6.0.25
Install-Package Microsoft.EntityFrameworkCore.Tools -version 6.0.25
-
创建模型类及上下文类(配置映射关系)
//模型类
public class UserInfo
{
[Key]
public int uid { get; set; }
public string uname { get; set; } = null!;
public bool ustate { get; set; }
}
//上下文类
public class UsersContext : DbContext
{
public UsersContext(DbContextOptions<UsersContext> options) : base(options)
{
}
public virtual DbSet<UserInfo> UsersInfo { get; set; } = null!;
}
appsettings.json
配置数据库链接字符串
"ConnectionStrings": {
"sqlcon": "Server=.;User Id=sa;Password=123456;Database=UserDB;Persist Security Info=True;"
}
Program.cs
将上下文类注册服务(并使用相关数据库中间件)
builder.Services.AddDbContext<UsersContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("sqlcon")));
使用ASP.NET Core MVC 案例
mvc layui表格绑定为例子 (几乎操作无区别)
后端代码:
//通过依赖注入 构建 上下文类
public readonly HaircutDBContext db;
public SysController(HaircutDBContext context)
{
db = context;
}
//进行查找列表
public IActionResult GetList(int page, int limit, string SelName = "")
{
//var ptlist = (from p in db.UserInfos
//select p).ToList();
List<UserInfo> ptlist = db.UserInfos.ToList();
//模糊查询
if (!string.IsNullOrEmpty(SelName))
{
ptlist = ptlist.Where(p => p.Uname.Contains(SelName)).ToList();
}
//layui表格展示
var pjson = new
{
code = 0,
msg = "",
count = ptlist.Count,
//分页
data = ptlist.OrderByDescending(p => p.URegTime).Skip((page - 1) * limit).Take(limit).ToList()
};
return Json(pjson);//返回匿名类型
}
前端代码:
// 创建渲染实例
table.render({
elem: '#test',
id: 'test',
url: '/Sys/GetList',
height: 'full-35', // 最大高度减去其他容器已占有的高度差
page: true,// 是否显示分页
limits: [5, 10, 15],
limit: 5, // 每页默认显示的数量
cols: [[
{ type: 'checkbox', fixed: 'left', align: 'center' },
{ field: 'uId', fixed: 'left', title: 'ID', sort: true, align: 'center' },
{ field: 'uname', title: '名称', align: 'center' },
{ field: 'uPhone', title: '联系', align: 'center' },
{ fixed: 'right', title: '操作', align: 'center' }
]]
});
创建其他数据库的链接
- 使用nuget添加引用
//mysql数据库
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tools
Pomelo.EntityFrameworkCore.MySql
//oracle数据库
Microsoft.EntityFrameworkCore.Tools
Oracle.EntityFrameworkCore
Oracle.ManagedDataAccess.Core
- 在程序包管理器控制台执行语句
//mysql
Scaffold-DbContext "server=localhost;userid=root;pwd=03047237;port=3306;database=userinfo;sslmode=none;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force
//oracle
Scaffold-DbContext "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));User Id=zzz;Password=123456;" Oracle.EntityFrameworkCore -O Models -F
要选中默认项目
-o 后面指定文件夹,
-f 表示是否覆盖原文件
-t 后面跟表名
- 连接串动态配置
a、将数据上下文中固定连接串去掉
b、appsettings.json
中配置链接串
//mysql数据库配置
"ConnectionStrings": {
"MySqlConnection": "server=localhost;userid=root;pwd=123456;port=3306;database=School;sslmode=none"
}
//oracle数据库配置
"ConnectionStrings": {
"OracleConnection": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA= (SERVER=DEDICATED)(SERVICE_NAME=orcl)));User Id=zzz;Password=123456;"
}
- 注册服务 在
Program.cs
//mysql服务
builder.Services.AddDbContext<SchoolContext>(options =>
options.UseMySql(Configuration.GetConnectionString("MySqlConnection"),MySqlServerVersion.LatestSupportedServerVersion));
//oracle服务
builder.Services.AddDbContext<ModelContext>(options =>
options.UseOracle(Configuration.GetConnectionString(""OracleConnection"")));
常用中间件使用
session
- 配置引用中间件
Program.cs
//注册session
builder.Services.AddSession();
//使用中间件
app.UseSession();
- 在后台使用(存储session值)
需要序列化成字符串形式(JsonConvert 需要导入NuGet包)
//使用session 存储
HttpContext.Session.SetString("list", JsonConvert.SerializeObject(list));
//使用session 获取
List<Access> a = JsonConvert.DeserializeObject<List<Access>>(HttpContext.Session.GetString("list"));
后台使用session可以直接GetString获取
- 在前台使用(获取session值)
@*获取session 引用命名空间 反序列化json*@
@using Microsoft.AspNetCore.Http;
@using Newtonsoft.Json;
@{
List<Access>? a = JsonConvert.DeserializeObject<List<Access>>(base.Context.Session.GetString("list"));
}