Entity Framework保存数据库中主有外键关系的主子表
主表:PM_ITEM
子表:PM_ITEM_DETAIL
1、问题描述:
主表的主键ID是自增长的,子表的ID是主键同时还是主表的外键,用EF对主子表进行事务保存的时候,因为主表的主键是不需要赋值的,所以如何保持主子表的ID保存时一致是个问题;子表的ID怎么和主表的ID一致?
解决方法:
EF给实体建立导航属性;
2、备注:EF的类和属性对应数据库表名和字段时必须大写;联合主键在实体属性上必须添加 [Key] 特性
using (context)
{
PmItem pmItem = new PmItem();
pmItem.EQUIP_MODEL = equiptype;
pmItem.CYCLE_TIME = int.Parse(time);
pmItem.STATUS = "0";
pmItem.CREATED_BY = GetLoginUser();
pmItem.CREATED_AT = DateTime.Now;
context.Set<PmItem>().Add(pmItem);
int index = 0;
foreach (var item in itmes)
{
index++;
PmItemDetail pmItemDetail = new PmItemDetail();
pmItemDetail.PmItem = pmItem; //重点是这一行,主子表的ID都不需要赋值,会自动同步
int seqmax = context.PmItemDetail.Where(p => p.ID == pmItem.ID)?.OrderByDescending(t => t.SEQ).FirstOrDefault()?.SEQ ?? 1;
pmItemDetail.SEQ = seqmax + index;
pmItemDetail.TEXT = item.ToString();
pmItemDetail.ISVISIBLE = "T";
context.PmItemDetail.Add(pmItemDetail);
}
if (context.SaveChanges()>0) //没有上面的处理这里会报错
{
return Json(new { status = true, message = "保存成功!" });
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?