由于Entity Framework 7尚未支持多对多关系,
我正在解决此问题link。
以下是上述链接中的代码:
class MyContext : DbContext
{
public DbSet<Post> Posts { get; set; }
public DbSet<Tag> Tags { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PostTag>()
.HasKey(t => new { t.PostId, t.TagId });
modelBuilder.Entity<PostTag>()
.HasOne(pt => pt.Post)
.WithMany(p => p.PostTags)
.HasForeignKey(pt => pt.PostId);
modelBuilder.Entity<PostTag>()
.HasOne(pt => pt.Tag)
.WithMany(t => t.PostTags)
.HasForeignKey(pt => pt.TagId);
}
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public List<PostTag> PostTags { get; set; }
}
public class Tag
{
public string TagId { get; set; }
public List<PostTag> PostTags { get; set; }
}
public class PostTag
{
public int PostId { get; set; }
public Post Post { get; set; }
public string TagId { get; set; }
public Tag Tag { get; set; }
}
问题
如何将Tag
与Post
相关联?
换句话说,如何在联结表中添加一行?
答案 0 :(得分:0)
以下是another SO question对我提出的方法的解答。
创建您的Tag
实例并将其添加到代码中。对Post
实例执行相同操作,初始化其PostTags导航属性,并将其添加到Posts
。
然后创建PostTag
实例,并使用Post
和Tag
实例对其进行初始化
最后调用SaveChanges
或SaveChangesAsync
方法。
这将允许EF在将所有涉及的实体写入基础数据库之前正确管理ID属性。