• Entity Framework的简单使用之多对多关系


    在现实生活中,对象之间多对多的关系也比较常见。比如一篇博客对应多个目录,一个目录也可以对应多个博客。

    下面我们就以博客和目录之间多对多关系进行讨论。

    首先我们添加实体、映射以及对应的服务。

    public class Blog : BaseEntity
        {
            public string BlogName { get; set; }
    
            public virtual ICollection<Category> Categorys { get; set; }
        }
    View Code
    public class Category:BaseEntity
        {
            public string CategoryName { get; set; }
    
            public virtual ICollection<Blog> Blogs { get; set; }
        }
    View Code

    现在我们来设置它们之间的映射关系,这点很重要:

    public class BlogMap : EntityTypeConfiguration<Blog>
        {
            public BlogMap()
            {
                this.ToTable("Blog");
                this.HasKey(c => c.Id);
    
                HasMany(thisTable => thisTable.Categorys)
                    .WithMany(anotherForeignKeyTable => anotherForeignKeyTable.Blogs)
                    .Map(relationTable => relationTable
                        .MapLeftKey("BlogId")
                        .MapRightKey("CategoryId")
                        .ToTable("BlogCategorys")
                    );
            }
        }
    View Code
    public class CategoryMap : EntityTypeConfiguration<Category>
        {
            public CategoryMap()
            {
                this.ToTable("Category");
                this.HasKey(c => c.Id);
            }
        }
    View Code

    多对多关系会涉及到三个表:Blog(博客)、BlogCategorys(中间表)、Category(目录),中间表只是保存Blog、Category的id值。

    我们来看一下测试的结果:

    由上图可以看到,blog可以关联多个category,category也可以关联多个blog。

    其实,多对多关系也可以转化为两个一对多的关系。由于关联的对象是延迟加载的(即加了virtual关键字的属性),在实际使用时才去查询数据库,因此,关联对象比较多时,会频繁地访问数据库,导致性能很低。所以,如果延迟加载的数据量比较多时,可以考虑将其之间查询出来再使用。

  • 相关阅读:
    python自定义ORM并操作数据库
    python 元类理解
    Python中type()详解:动态创建类
    Centos7安装教程
    数据库建模:学生信息系统搭建实验
    数据库索引、视图与触发器
    用python批量插入数据到数据库中
    制作一个简单的部门员工知识分享的python抽取脚本
    【Mybatis】XML配置实现增删改查
    NIO,AIO,BIO
  • 原文地址:https://www.cnblogs.com/dengwenbo/p/4771997.html
Copyright © 2020-2023  润新知