ef core many to many relationship example

Example 1: ef core many-to-many

class MyContext : DbContext
{
    public MyContext(DbContextOptions<MyContext> options)
        : base(options)
    {
    }

    public DbSet<Post> Posts { get; set; }
    public DbSet<Tag> Tags { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
            .HasMany(p => p.Tags)
            .WithMany(p => p.Posts)
            .UsingEntity<PostTag>(
                j => j
                    .HasOne(pt => pt.Tag)
                    .WithMany(t => t.PostTags)
                    .HasForeignKey(pt => pt.TagId),
                j => j
                    .HasOne(pt => pt.Post)
                    .WithMany(p => p.PostTags)
                    .HasForeignKey(pt => pt.PostId),
                j =>
                {
                    j.Property(pt => pt.PublicationDate).HasDefaultValueSql("CURRENT_TIMESTAMP");
                    j.HasKey(t => new { t.PostId, t.TagId });
                });
    }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public ICollection<Tag> Tags { get; set; }
    public List<PostTag> PostTags { get; set; }
}

public class Tag
{
    public string TagId { get; set; }

    public ICollection<Post> Posts { get; set; }
    public List<PostTag> PostTags { get; set; }
}

public class PostTag
{
    public DateTime PublicationDate { get; set; }

    public int PostId { get; set; }
    public Post Post { get; set; }

    public string TagId { get; set; }
    public Tag Tag { get; set; }
}

Example 2: many to many ef core

public class Book{    public int BookId { get; set; }    public string Title { get; set; }    public Author Author { get; set; }    public ICollection<BookCategory> BookCategories { get; set; }}  public class Category{    public int CategoryId { get; set; }    public string CategoryName { get; set; }    public ICollection<BookCategory> BookCategories { get; set; }}  public class BookCategory{    public int BookId { get; set; }    public Book Book { get; set; }    public int CategoryId { get; set; }    public Category Category { get; set; }}

Example 3: many to many ef core

public class Book{    public int BookId { get; set; }    public string Title { get; set; }    public Author Author { get; set; }    public ICollection<Category> Categories { get; set; }}   public class Category{    public int CategoryId { get; set; }    public string CategoryName { get; set; }    public ICollection<Book> Books { get; set; }}