Create many to many relationship .net core
For example relationship bettween User - Venue is many to many
1. Add many-To-many table
namespace ForumWeb.Models
{
public class UserVenues
{
// [Key] is defined with fluent API in ApplicationDbContext
public string ApplicationUserId { get; set; }
public ApplicationUser User { get; set; }
public int VenueId { get; set; }
public virtual Venue Venue { get; set; }
}
}
2. Add to User model field UserVenues
public class ApplicationUser : IdentityUser
{
public string Name { get; set; }
public ICollection<UserVenues> UserVenues { get; set; }
public ApplicationUser()
{
UserVenues = new List<UserVenues>();
}
}
3. It is not nessecary to have Users List in Venue model thats why i didnt change Venue
4. Add to application context
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// EF Core does not allow composite keys with data annotations as of yet.
builder.Entity<UserVenues>()
.HasKey(uv => new { uv.ApplicationUserId, uv.VenueId });
// created table for many-to-many relationships for UserVenues
builder.Entity<UserVenues>()
.HasOne(v => v.User)
.WithMany(v => v.Venues)
.HasForeignKey(v => v.ApplicationUserId)
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<UserVenues>()
.HasOne(v => v.Venue)
.WithMany()
.HasForeignKey(v => v.VenueId)
.OnDelete(DeleteBehavior.Cascade);
There is 3 options
Cascade - зависимый объект удаляется при удалении главного
SetNull - в зависимом объекте выставляется NULL
Restrict - нечего не изменяется при удалении