zoukankan      html  css  js  c++  java
  • EF Core中的多对多映射如何实现?

    EF 6.X中的多对多映射是直接使用HasMany-HasMany来做的。但是到了EF Core中,不再直接支持这种方式了,可以是可以使用,但是不推荐,具体使用可以参考《你必须掌握的EntityFramework 6.X与Core 2.0》一文。在这里我就详细的说下如何在EF core下实现。
    首先就是实体类的建立:

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
    
        public ICollection<PostTag> PostTags { get; } = new List<PostTag>();
    }
    
    public class Tag
    {
        public int TagId { get; set; }
        public string Text { get; set; }
    
        public ICollection<PostTag> PostTags { get; } = new List<PostTag>();
    }
    
    public class PostTag
    {
        public int PostId { get; set; }
        public Post Post { get; set; }
    
        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

    接下来就是映射了。派生自DbContext的上下文类:

    public class MyContext : DbContext
    {
        public DbSet<Post> Posts { get; set; }
        public DbSet<Tag> Tags { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder.UseSqlServer(
                @"Server=(localdb)mssqllocaldb;Database=Test;ConnectRetryCount=0");
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<PostTag>().ToTable("PostTags");
            modelBuilder.Entity<PostTag>()
                .HasKey(t => new { t.PostId, t.TagId });
        }
    }

    这样就完成了我们的多对多映射了。我们只是通过多建立了一个表,将两个实体类的Id作为联合主键。

    在Identity框架中,如果你细心点,你会发现有个userroles表,这个表是就是用来做Users表和Roles表的映射的。那么接下来我们只要新建一个实体类,随后在上下文类中映射到表:

    modelBuilder.Entity<UserRoles>.ToTable("userroles");

    这样就可以了。然后我们就可以很方便的给用户添加角色了。

    参考链接:https://blog.oneunicorn.com/2017/09/25/many-to-many-relationships-in-ef-core-2-0-part-1-the-basics/

  • 相关阅读:
    设计模式---了解
    下一阶段目标
    数据结构(七)排序---快速排序
    数据结构(七)排序---归并排序
    数据结构(七)排序---堆排序
    数据结构(七)排序---希尔排序
    数据结构(七)排序---直接插入排序(稳定)
    数据结构(七)排序---简单选择排序
    求助OPC Opc.IDiscovery m_discovery = new OpcCom.ServerEnumerator();
    C#如何:启用和禁用自动绑定重定向 (微软)
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/9270450.html
Copyright © 2011-2022 走看看