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

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.kler.cn/a/501950.html

相关文章:

  • Cookie和Session
  • 嵌入式系统中的 OpenCV 与 OpenGLES 协同应用
  • 如何将 sqlserver 数据迁移到 mysql
  • Type-C双屏显示器方案
  • outlook Synchronization problem conflict 同步问题
  • iOS - 关联对象
  • AI的崛起:它将如何改变IT行业的职业景象?
  • 多模态论文笔记——CLIP
  • C#上位机通过CAN总线发送bin文件
  • 高阶C语言|探索指针的根源之目(进阶指针)
  • 云原生周刊:Prometheus 3.0 正式发布
  • 检测模型安全的更高级的方法
  • 例子:WeTextProcessing,如何查看现在已安装的这个模块的版本号呢?查看虚拟环境中模块的版本
  • 征服Windows版nginx(2)
  • 今日总结 2025-01-13
  • 【Apache Paimon】-- 14 -- Spark 集成 Paimon 之 Filesystem Catalog 与 Hive Catalog 实践
  • matlab的绘图的标题中(title)添加标量以及格式化输出
  • 青少年编程与数学 02-006 前端开发框架VUE 17课题、组件深入
  • CClink IEF Basic设备数据 转 EtherCAT项目案例
  • 基于React的两种方式使用React-pdf
  • 开关不一定是开关灯用 - 命令模式(Command Pattern)
  • HarMonyOS使用Tab构建页签
  • Megatron:深度学习中的高性能模型架构
  • LeetCode 977 题:有序数组的平方
  • Python AI教程之十八:监督学习之决策树(9) 决策树模型中的过度拟合
  • 提升租赁效率的租赁小程序全解析