当前位置: 首页 > news >正文

EF Core一对一和多对多

目录

EF Core一对一

关系属性

关系配置

使用

EF Core多对多

关系属性

关系配置

使用


EF Core一对一

关系属性

必须显式的在其中一个实体类中声明一个外键属性,可以在Order建立Delivery,也可以在Delivery建立OrderId

class Order
{public long Id { get; set; }public string Name { get; set; }public string Address { get; set; }public Delivery Delivery { get; set; }
}class Delivery
{public long Id { get; set; }public string CompanyName { get; set; }public string Number {  get; set; }public Order Order { get; set; }public long OrderId { get; set; }
}

关系配置

 class OrderConfig : IEntityTypeConfiguration<Order>{public void Configure(EntityTypeBuilder<Order> builder){builder.ToTable("T_Orders");builder.HasOne(o => o.Delivery).WithOne(p => p.Order).HasForeignKey<Delivery>(p => p.OrderId);}}class DeliveryConfig : IEntityTypeConfiguration<Delivery>
{public void Configure(EntityTypeBuilder<Delivery> builder){builder.ToTable("T_Deliverys");}
}

使用

static async Task Main(string[] args)
{using (MyDbContext ctx = new MyDbContext()){Order o1 = new Order{Name="书",Address="中国"};Delivery d1 = new Delivery{CompanyName="顺丰",Number="SF25646",Order=o1};ctx.Deliverys.Add(d1);await ctx.SaveChangesAsync();}
}

EF Core多对多

EF Core5.0开始,才正式支持多对多

关系属性

class Student
{public int Id { get; set; }public string Name { get; set; }public List<Teacher> Teachers { get; set; } = new List<Teacher>();
}class Teacher
{public int Id { get; set; }public string Name { get; set; }public List<Student> Students { get; set; } = new List<Student>();
}

关系配置

class StudentConfig : IEntityTypeConfiguration<Student>
{public void Configure(EntityTypeBuilder<Student> builder){builder.ToTable("T_Students");builder.HasMany(o => o.Teachers).WithMany(t => t.Students).UsingEntity(j => j.ToTable("T_Student_Teachers"));}
}class TeacherConfig : IEntityTypeConfiguration<Teacher>
{public void Configure(EntityTypeBuilder<Teacher> builder){builder.ToTable("T_teachers");}
}

使用

class Program
{static async Task Main(string[] args){using (MyDbContext ctx = new MyDbContext()){//插入Student s1 = new Student { Name = "张三" };Student s2 = new Student { Name = "李四" };Student s3 = new Student { Name = "王五" };Teacher t1 = new Teacher { Name = "Tom" };Teacher t2 = new Teacher { Name = "Jerry" };Teacher t3 = new Teacher { Name = "Bob" };s1.Teachers.Add(t1);s1.Teachers.Add(t2);s2.Teachers.Add(t2);s2.Teachers.Add(t3);s3.Teachers.Add(t1);s3.Teachers.Add(t2);s3.Teachers.Add(t3);ctx.Students.Add(s1);ctx.Students.Add(s2);ctx.Students.Add(s3);await ctx.SaveChangesAsync();//查询var teachers = ctx.Teachers.Include(t => t.Students);foreach (var t in teachers){Console.WriteLine(t.Name);foreach (var s in t.Students){Console.WriteLine("\t" + s.Name);}}}}
}

http://www.lryc.cn/news/520373.html

相关文章:

  • 记一次sealos部署k8s集群之delete了第一台master如何恢复
  • vue3+vite+ts集成第三方js
  • android framework.jar 在应用中使用
  • FFmpeg入门
  • 云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换
  • 量子计算:从薛定谔的猫到你的生活
  • 51单片机——I2C-EEPROM
  • R语言的语法糖
  • 【算法学习笔记】30:埃氏筛(Sieve of Eratosthenes)和线性筛(Linear Sieve)
  • 【AscendC】tiling方案设计不当引起的一个时隐时现的bug
  • 视频转码对画质有影响吗?视频融合平台EasyCVR支持哪些转码格式?
  • 工业视觉2-相机选型
  • 基于SpringBoot+Vue的健身房管理系统
  • leetcode 面试经典 150 题:快乐数
  • Leetcode 279. 完全平方数 动态规划 完全背包问题
  • python学opencv|读取图像(三十三)阈值处理图像-限定像素
  • QT Quick QML 实例之椭圆投影,旋转
  • 炸砖块游戏的最终图案
  • LLM的实验平台有哪些:快速搭建测试大语言模型
  • python3GUI--大屏可视化-XX产业大数据指挥舱(附下载地址) By:PyQt5
  • .NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘
  • uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture
  • (undone) MIT6.S081 2023 学习笔记 (Day5: LAB4 traps)
  • 前端笔记----
  • 学习华为熵减,激发组织活力
  • 9Hive数据倾斜
  • 【大数据】机器学习 -----关于data.csv数据集分析案例
  • 深入解析 C++ 类型转换
  • C++ union 联合(八股总结)
  • 聊聊AI Agent