多对多 EF7

10

模型:

public partial class Film
{
    public int FilmID { get; set; }
    public virtual ICollection<Genre> Genres { get; set; }
}

public class Genre
{
    public int GenreID { get; set; }

    public virtual ICollection<Film> Films { get; set; }
}

使用EF6的OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Film>()
                    .HasMany(e => e.Genres)
                    .WithMany(e => e.Films)
                    .Map(m => m.ToTable("Genre_Film").MapLeftKey("Films_IdFilm").MapRightKey("Genres_IdGenre"));
}

我使用SQLite,如何用EF7做同样的操作?

3个回答

9

EF7文档说明了如何实现此功能:http://docs.efproject.net/en/latest/modeling/relationships.html#many-to-many

        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 PostTag
        {
          public int PostId { get; set; }
          public Post Post { get; set; }
          public int TagId { get; set; }
          public Tag Tag { get; set; }
        }

不知道你可以用 blockquote 包含一个 _code sample_。很好! :) - thepirat000

7

映射API将在EF 7中更改。已经有一个更加直观的一对多API的提案intuitive one to many API。关于多对多,有一个简短的说明:

我们预计多对多API与一对多和一对一API非常相似。

但它还没有在当前源代码中实现。在为测试创建的上下文中,它说:

// TODO: Many-to-many
//modelBuilder.Entity<TSupplier>().ForeignKeys(fk => fk.ForeignKey<TProduct>(e => e.SupplierId));

这大概就是我能找到的所有相关信息了。

我真心希望EF7在这方面能够向后兼容。


2
您还可以在不创建新对象的情况下实现新的表。通过使用流畅的 API,可以使用以下代码完成此操作:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Film>()
        .HasMany(f => f.Genres)
        .WithMany(g => g.Films)
        .UsingEntity(t => t.ToTable("GenreFilms"));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接