Chào mọi người,
Mình có bài toán cần phải thiết kế database có yêu cầu như sau:
One-to-many: một User có thể tạo nhiều Post
Many-to-many: một Post có thể có nhiều người được tag vào và một người có thể được tag trong nhiều post.
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public List<Post> CreatedPosts{ get; set; }
public List<PostTag> PostTags{ get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public User CreatedMember { get; set; }
public List<PostTag> ReminderMemberTags { get; set; }
}
public class PostTag
{
public int ReminderId { get; set; }
public Post Reminder { get; set; }
public int MemberId { get; set; }
public User Member { get; set; }
}
Mình đã có thể cofigure riêng One-to-many và Many-to-many rồi nhưng thử kết hợp cả 2 lại như sau thì không update được database.
public class ApplicationDbContext : DbContext
{
public DbSet<User> Members { get; set; }
public DbSet<Post> Reminders { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=localhost\SQLEXPRESS;Database=DbRelationshipDB;Trusted_Connection=True;MultipleActiveResultSets=true");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//Configure One-to-many
modelBuilder.Entity<User>()
.HasMany(m => m.CreatedReminders)
.WithOne(r => r.CreatedMember)
.IsRequired();
//Configure many-to-many
modelBuilder.Entity<PostTag>()
.HasKey(t => new { t.ReminderId, t.MemberId });
modelBuilder.Entity<PostTag>()
.HasOne(rmt => rmt.Reminder)
.WithMany(a => a.ReminderMemberTags)
.HasForeignKey(am => am.ReminderId);
modelBuilder.Entity<PostTag>()
.HasOne(rmt => rmt.Member)
.WithMany(x => x.ReminderMemberTags)
.HasForeignKey(am => am.MemberId);
}
}
Bài toán của mình khác với bài toán post-tag khác như sau.
Bài toán của mình :Một người có thể tạo nhiều post, và một post có thể tag nhiều người vào.
Bài toán khác: Một người có thể tạo nhiều post, và một post có thể tag nhiều tag vào.
Mong mọi người giúp đỡ configure hướng Code-first bằng Fluent API hoặc Data Annotation cũng được ạ.