创建.net core 控制台应用程序:

项目文件结构:

添加如下NuGet包:

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

添加如下实体类:

/// <summary>
/// 部门
/// </summary>
public class Dept
{private Dept() { }/// <summary>/// 单独添加部门/// </summary>/// <param name="name"></param>/// <param name="parentId"></param>public Dept(string name,long? parentId){Name = name;ParentId = parentId;}/// <summary>/// 添加部门并添加用户/// </summary>/// <param name="name"></param>/// <param name="parentId"></param>/// <param name="UserDepts"></param>public Dept(string name, long? parentId, ICollection<UserDept> userDepts){Name = name;ParentId = parentId;UserDepts = userDepts;}public long Id { get; private set; }public string Name { get; private set; }public long? ParentId { get; private set; }public virtual Dept Parent { get; private set; }public virtual ICollection<Dept> Depts { get; private set; }public virtual ICollection<UserDept> UserDepts { get; private set; }
}/// <summary>
/// 用户
/// </summary>
public class User
{private User() { }public User(string name, string phone, int sex){Name = name;Phone = phone;Sex = sex;}public User(long id,string name, string phone, int sex){Name = name;Phone = phone;Sex = sex;Id = id;}public User(string name, string phone, int sex, ICollection<UserDept> userDepts, ICollection<UserCompany> userCompanys){Name = name;Phone = phone;Sex = sex;UserDepts = userDepts;UserCompanys = userCompanys;}public User(long id,string name, string phone, int sex, ICollection<UserDept> userDepts, ICollection<UserCompany> userCompanys){Name = name;Phone = phone;Sex = sex;UserDepts = userDepts;UserCompanys = userCompanys;Id = id;}public long Id { get; private set; }public string Name { get; private set; }public string Phone { get; private set; }public int Sex { get; private set; }public virtual ICollection<UserDept> UserDepts { get; private set; }public virtual ICollection<UserCompany> UserCompanys { get; private set; }
}/// <summary>
/// 用户公司
/// </summary>
public class UserCompany
{private UserCompany() { }/// <summary>/// 通过用户添加公司/// </summary>/// <param name="name"></param>public UserCompany(string name){Name = name;}/// <summary>/// 单独为用户添加公司/// </summary>/// <param name="name"></param>/// <param name="userId"></param>public UserCompany(string name, long userId){Name = name;UserId = userId;}/// <summary>/// 通过公司添加用户/// </summary>/// <param name="name"></param>/// <param name="user"></param>public UserCompany(string name, User user){Name = name;User = user;}public long Id { get; private set; }public string Name { get; private set; }public long UserId { get; private set; }public virtual User User { get; private set; }
}/// <summary>
/// 用户部门
/// </summary>
public class UserDept
{private UserDept() { }public UserDept(long? userId, long? deptId){if (userId.HasValue)UserId = userId.Value;if (deptId.HasValue)DeptId = deptId.Value;}public long Id { get; private set; }public long UserId { get; private set; }public virtual User User { get; private set; }public long DeptId { get; private set; }public virtual Dept Dept { get; private set; }
}

添加DbContext:

public class TestContext : DbContext
{protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-2H9332M;Initial Catalog=Test;Integrated Security=True");}public DbSet<User> Users { get; set; }public DbSet<Dept> Depts { get; set; }public DbSet<UserCompany> UserCompanys { get; set; }public DbSet<UserDept> UserDepts { get; set; }
}

在程序包控件管理台分别执行如下命令:

migrations add init

update-database

执行成功后生成的数据库关系图如下:

在Program类中添加如下测试代码:

class Program
{static void Main(string[] args){var context = new TestContext();//添加部门context.Set<Dept>().Add(new Dept("部门1", null));//添加用户context.Set<User>().Add(new User("用户1", "1111111", 0));//添加公司context.Set<UserCompany>().Add(new UserCompany("公司1", 1));//添加部门、用户部门context.Set<Dept>().Add(new Dept("部门2",1,new List<UserDept>(){new UserDept(1,null)}));//添加用户、用户部门、用户公司context.Set<User>().Add(new User("张三","13037318682",1,new List<UserDept>{new UserDept(null, 1)},new List<UserCompany>{new UserCompany("ABC公司")}));//添加用户、公司context.Set<UserCompany>().Add(new UserCompany("公司2", new User("用户2", "222222", 2)));context.SaveChanges();}
}

运行代码添加的数据如下:

接着我们来测试下一对多的更新代码如下:

//更新用户、用户部门、用户公司
context.Set<User>().Update(new User(1, "李四", "13037318682", 1,new List<UserDept> {new UserDept(null,2)},new List<UserCompany>{new UserCompany("ABC公司修改")}));
context.SaveChanges();

结果如下:

使用这种方式修改会在UserDept、UserCompany表中新增一条数据,这种结果也正是我们业务所需要的。

如果我想修改一对多中的子表某一条记录而不是增加一条数据又该如何操作呢?请看如下代码:

context.Set<User>().Update(new User(2, "用户2修改2", "13037318682", 1,new List<UserDept> {new UserDept(2,2,2)},new List<UserCompany>{new UserCompany(1,"ABCD公司修改")}));context.SaveChanges();

结果如下:

由此可以看出在使用修改操作时需要指定主键Id。

EF CORE 一对多、多对多添加、修改相关推荐

  1. EF Core一对多和多对多

    1.Model配置 Entity Framework Core 提供了两种方式 A.使用 fluent API 配置模型 可在派生上下文中覆写 OnModelCreating 方法,并使用 Model ...

  2. 用ASP.NET Core MVC 和 EF Core 构建Web应用 (一)

    系统必备 .NET Core 2.0.0 SDK 或更高版本. 已安装 ASP.NET 和 Web 开发工作负载的 Visual Studio 2017 15.3 版或更高版本. 创建Web应用程序 ...

  3. EF Core的学习之路01

    本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...

  4. ASP.NET Core MVC+EF Core从开发到部署

    笔记本电脑装了双系统(Windows 10和Ubuntu16.04)快半年了,平时有时间就喜欢切换到Ubuntu系统下耍耍Linux,熟悉熟悉Linux命令.Shell脚本以及Linux下的各种应用的 ...

  5. Entity Framework 6.3 和 EF Core 3.0 路线图

    尽管脱离了 .NET Core 发布循环,但是 EF Core 正在开发其 3.0 路线图.除此之外,还对原来的 Entity Framework 进行了一些重要的变更. 更多服务器端的查询 将 LI ...

  6. 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图

    基于.Net Core Web MVC的图书查询系统 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面 第二章,.Net Core Web MVC配置邮件发送服务 第 ...

  7. BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...

    1.多对多添加方法 @Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(mod ...

  8. ABP应用——修改EF Core

    自从.net core跨平台后,.net环境下的开源项目渐渐丰富起来,ABP使用ef core作为数据库组件,并且使用code first,所以涉及到migration操作. 下载代码 ABP自定义模 ...

  9. 使用 EF Core Power Tools 和 CoreAdmin 在 5 分钟内将管理员 CRUD 网页添加到您的 ASP.NET Core Web 应用程序

    有时,也许在新产品/解决方案开发的早期阶段,您可能会发现自己需要一种简单的方法来让客户编辑解决方案中的某些数据. 一种方法是为现有数据库的简单数据输入创建一个管理页面. 在这篇文章中,我将展示如何使用 ...

最新文章

  1. input子系统分析之三:驱动模块
  2. hadoop使用mapreduce统计词频_深圳嘉华学校之Hadoop简介(什么是Map-Reduce-Mapreduce-about云开发)...
  3. 【控制】傅里叶系列(一)傅里叶级数 (Fourier series) 的推导
  4. sklearn特征的提取(下)
  5. linux 加载 iso,Linux iso文件加载和解包的用法
  6. 美国教授描述未来学校,将颠覆现有教育模式
  7. 12.6 static类成员
  8. java中错误的源文件_如果我的Java源文件中存在语法错误,为什么Eclipse会生成.class文件?...
  9. chromedriver下载链接以及对应版本
  10. Android 编程下的计时器
  11. java 单例 内存释放_java 单例模式 防止内存泄漏
  12. APP消息推送-个推java端实现
  13. C Primer Plus(6) 中文版 第11章 字符串和字符串函数 11.1 表示字符串和字符串I/O
  14. zing开发者_Zing免费开放Java开发人员
  15. python3实现二叉树的简单遍历(DLR 、LDR、LRD)
  16. Java8--20道关于Stream流的题目练习
  17. 爬虫系列 | 1、什么是爬虫,玩爬虫的正确姿势有哪些
  18. 【基础知识】~ FIFO
  19. 盘点2009十佳新商业模式
  20. 解决!Google Play 设备未获得Play保护机制认证

热门文章

  1. Timeline 3D for Mac(时间轴记事本软件)
  2. 程序员因违反《竞业协议》赔偿腾讯近百万
  3. 对冲基金桥水交班:达利欧卸任 将控制权交接给下一代
  4. 区块链技术学习总结专栏前言
  5. D. DS栈—波兰式,逆波兰式(dsoj c++)
  6. 2022-2028年中国智慧燃气行业市场全景评估及投资前景规划报告
  7. Chartistic - 操作简单且免费的数据可视化图表生成工具
  8. 计算机科技文化节宣传标语,科技节标语
  9. python下载抖音无水印视频
  10. 水木joke十月画月刊