EF Core中的多对多映射如何实现?
程序员文章站
2022-03-31 22:56:43
EF 6.X中的多对多映射是直接使用HasMany-HasMany来做的。但是到了EF Core中,不再直接支持这种方式了,可以是可以使用,但是不推荐,具体使用可以参考《你必须掌握的EntityFramework 6.X与Core 2.0》一文。在这里我就详细的说下如何在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/
上一篇: 无法外网访问VM中的hadoop yarn的8088端口
下一篇: Oracle常用名词解释
推荐阅读
-
JPA中实现双向多对多的关联关系(附代码下载)
-
JPA中实现双向一对多的关联关系
-
JPA中实现单向一对多的关联关系
-
EF Core中的多对多映射如何实现?
-
EF更新多对多关系表中记录的时候,无法更新关系表的问题。
-
hibernate如何实现表的单向1:n、双向多对一(代码)
-
python中pandas对多列进行分组统计的实现
-
Entity Framework (EF) Core工具创建一对多和多对多的关系
-
Laravel5 的多对多关系中,在 blade 模板里面如何循环输出其中一张表的字段,而且输出其关联对应的另外一张表的字段
-
使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?