当前位置:网站首页>EfCore 表关系一对一,使用案例
EfCore 表关系一对一,使用案例
2022-07-20 13:36:00 【天马3798】
一、数据结构关系
---关系行数据库描述归类
---一对一
---【业务场景】学生的信息表-》学生的成绩表
create table Stu_Info(
StuID int identity(1,1),
StuName nvarchar(30) not null,
CreateTime datetime null,
primary key(StuID)
);
go
create table Stu_Score(
StuID int not null,
English decimal(18,2) null,
Chinese decimal(18,2) null,
primary key(StuID),
foreign key(StuID) references Stu_Info(StuID)
);
go
二、EF Core上下文对应
1.学生资料
/// <summary>
/// 学生信息
/// </summary>
internal class Stu_Info
{
[Key]
public int StuID { get; set; }
public string StuName { get; set; }
public DateTime? CreateTime { get; set; }
/// <summary>
/// 外键响应,一对一
/// </summary>
public virtual Stu_Score Stu_Score { get; set; }
}
2.学生成绩
/// <summary>
/// 学生的成绩记录
/// </summary>
internal class Stu_Score
{
[Key]
public int StuID { get; set; }
public decimal? English { get; set; }
public decimal? Chinese { get; set; }
/// <summary>
/// 外键锁定
/// </summary>
[ForeignKey("StuID")]
public virtual Stu_Info Stu_Info { get; set; }
}
3.数据库上下文
internal class StudentContext:DbContext
{
/// <summary>
/// 链接字符串
/// </summary>
public static string SqlStr { get; set; } = "data source=.;initial catalog=Student;Trusted_Connection=True;";
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(SqlStr);
}
base.OnConfiguring(optionsBuilder);
}
public virtual DbSet<Stu_Info> Stu_Info { get; set; }
public virtual DbSet<Stu_Score> Stu_Score { get; set; }
}
三、关系操作和筛选使用
1.添加学生信息和学生的成绩
static void Test1()
{
StudentContext _context = new StudentContext();
//添加学生信息
Stu_Info stu = new Stu_Info()
{
StuName = "李四",
CreateTime = DateTime.Now
};
//添加成绩信息
Stu_Score score = new Stu_Score()
{
StuID = stu.StuID,
Chinese = 100,
English = 50
};
stu.Stu_Score = score;
_context.Stu_Info.Add(stu);//保存到数据库
_context.SaveChanges();
Console.WriteLine(_context.Stu_Info.Count());
}
2.查询学生+成绩;过滤掉,没有成绩记录的学生
static void Test2()
{
StudentContext _context = new StudentContext();
var list = _context.Stu_Info.Include(q => q.Stu_Score)
.Where(q=>q.Stu_Score!=null) //条件筛选,过滤掉不存在关联表的数据
.ToList();
foreach (var item in list)
{
Console.WriteLine($"{item.StuName},英语成绩:{item.Stu_Score?.English},中文成绩:{item.Stu_Score?.Chinese}");
}
}
如果不过滤,则显示所有学生:
更多:
EF Core 批量写入数据使用整理(二)Z.EntityFramework.Extensions.EFCore
EF Core 批量写入数据使用整理_EF Core批量插入数据(一)
Ef Core 使用Entity方式配置外键
边栏推荐
猜你喜欢
随机推荐
uniapp中调用相机相册/上传/扫码整理
Redis - 管理工具 redis-cli 详解
ython中if __name__ == ‘__main__‘:的作用和原理
分布式事务
These colleges and universities will score! Please note that!
Design microservice security architecture
This ide plug-in 3.0 makes you the most security aware programmer in the company
Nacos手摸手教学【一】Nacos动态配置
淘宝/天猫:畅销榜 API 返回值说明
How many months did you write your first SCI?
解析jpeg解码格式
自己整理一些散的知识点
去河南投资,VC很犹豫
这款IDE插件3.0让你成为公司最懂安全的程序员
六.uniapp[闪屏页加载方式、闪屏页设置]
Parsing JPEG decoding format
Promise in ES6
uniapp中登录和支付整理
【upload靶场17-21】二次渲染、条件竞争、黑白名单绕过
五.uni-app API[路由与跳转、网络请求、数据缓存]