ef core 5 many to many example
Example 1: ef core many-to-many
class MyContext : DbContext
{
public MyContext(DbContextOptions options)
: base(options)
{
}
public DbSet Posts { get; set; }
public DbSet Tags { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(p => p.Tags)
.WithMany(p => p.Posts)
.UsingEntity(
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 Tags { get; set; }
public List PostTags { get; set; }
}
public class Tag
{
public string TagId { get; set; }
public ICollection Posts { get; set; }
public List 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
protected override void OnModelCreating(ModelBuilder modelBuilder){ modelBuilder.Entity() .HasKey(bc => new { bc.BookId, bc.CategoryId }); modelBuilder.Entity() .HasOne(bc => bc.Book) .WithMany(b => b.BookCategories) .HasForeignKey(bc => bc.BookId); modelBuilder.Entity() .HasOne(bc => bc.Category) .WithMany(c => c.BookCategories) .HasForeignKey(bc => bc.CategoryId);}
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 Categories { get; set; }} public class Category{ public int CategoryId { get; set; } public string CategoryName { get; set; } public ICollection Books { get; set; }}