public class Note
{
public Note()
{
CreationDate = DateTime.Now;
Tags = new HashSet<Tag>();
Parts = new HashSet<Part>();
}
public int ID { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual ICollection<Part> Parts { get; set; }
public DateTime? CreationDate { get; set; }
}
public class Tag
{
public Tag()
{
Notes = new HashSet<Note>();
}
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Note> Notes { get; set; }
}
添加迁移时会发生这种情况:
您为什么认为它会发生?
编辑:
DataDbContext:
public class DataDbContext : DbContext
{
public DbSet<Note> Notes { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<Part> Parts { get; set; }
}
最佳答案
您在那里有多对多关系。如文档所述:http://docs.efproject.net/en/latest/modeling/relationships.html#id21
尚不支持没有实体类来表示联接表的多对多关系。但是,可以通过为联接表包括一个实体类并映射两个单独的一对多关系来表示多对多关系。
因此,您必须像这样创建其他“join”类:
public class NoteTag
{
public int NoteId { get; set; }
public Note Note { get; set; }
public int TagId { get; set; }
public Tag Tag { get; set; }
}
然后,更换
ICollection<Tag> Tags {set;get}
在您的Note课中
ICollection<NoteTag> NoteTags {set;get}
以及在Tag类中:
ICollection<Note> Notes {set;get;}
到
ICollection<NoteTags> NoteTags {set;get}
然后在DbContext中重写OnModelCreating方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<NoteTag>()
.HasKey(t => new { t.NoteId, t.TagId });
modelBuilder.Entity<NoteTag>()
.HasOne(pt => pt.Note)
.WithMany(p => p.NoteTags)
.HasForeignKey(pt => pt.NoteId);
modelBuilder.Entity<NoteTag>()
.HasOne(pt => pt.Tag)
.WithMany(t => t.NoteTags)
.HasForeignKey(pt => pt.TagId);
}