簡體   English   中英

多對多 EF7

[英]many to many EF7

楷模:

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; }
}

OnModelCreating 使用 EF6

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 執行相同的操作?

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; }
        }

映射API將在EF 7中更改。已經提出了一種更直觀的一對多API 在那里有許多短語:

我們希望多對多API與一對多和一對一API非常相似。

但它尚未在當前來源中實施。 在為測試創建的上下文中,它說:

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

這就是我能找到的所有相關信息。

我當然希望EF7在這方面能夠向后兼容。

您也可以在不創建新的 object 的情況下完成新表。這可以通過 Fluent API 使用以下代碼完成:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Film>()
        .HasMany(f => f.Genres)
        .WithMany(g => g.Films)
        .UsingEntity(t => t.ToTable("GenreFilms"));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM