EntityFramework : 将现有的一对多关系映射到模型

EntityFramework : Mapping existing one-to-many relationship to Model

我正在使用 Entity Framework 的 Linq-to-Sqlite ORM。由于 Linq-to-Sqlite 本身无法基于使用代码优先方法的模型创建 tables,我不得不重用现有的 table 模式来构建实体模型设计。以下是我预期的模型设计:

public class Movie
{
    public int MovieId { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Genre> Genres { get; set; }

}

public class Genre
{
    public int GenreId { get; set; }
    public string GenreName { get; set; }
}

下面是现有的 table 架构:

CREATE TABLE Movie
(
    MovieId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    Title TEXT
)

CREATE TABLE "Genre"
(
    'GenreId' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    'GenreName' TEXT NOT NULL,
     UNIQUE(GenreName)
)

CREATE TABLE MovieGenre
(
    'MovieId' INTEGER NOT NULL REFERENCES Movie(MovieId),
    'GenreId' INTEGER NOT NULL REFERENCES Genre(GenreId),
     UNIQUE(MovieID, GenreID)
)

所以,基本上 一部 电影可以有 许多 类型分配给它。但是,我希望拥有从 Genre 实体到 Movie 实体的任何关系。

下面是我重写的 OnModelCreating 方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        try
        {
            modelBuilder.Entity<Movie>()
                .HasMany<Genre>(m => m.Genres)
                .WithOptional()
                .Map(mg =>
                    {
                        mg.ToTable("MovieGenre");
                        mg.MapKey("GenreId");
                    });
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

我收到异常消息=在模型中找不到指定的 table 'MovieGenre'。确保已正确指定 table 名称。

我们如何将关系 table MovieGenre 映射到 Movie 和 Genre 实体,以便我可以填充 Movie.Genres ICollection 属性?

那种关系就是many-to-many and not one-to-many. I'm not an expert in SQL Lite but I think the last table should be like this (see this link):

CREATE TABLE "MovieGenres"
(
  'MovieId' INTEGER NOT NULL,
  'GenreId' INTEGER NOT NULL,
   PRIMARY KEY (MovieId, GenreID),

  FOREIGN KEY (MovieId) REFERENCES Movies(MovieId),
  FOREIGN KEY (GenreId) REFERENCES Genres(GenreId)
)

要在 EF 中映射该关系,配置应该是这样的:

modelBuilder.Entity<Movie>().HasMany(m => m.Genres)
                             .WithMany(g =>g.Movies)
                             .Map(c =>{  c.MapLeftKey("MovieId");
                                         c.MapRightKey("GenreId");
                                         c.ToTable("MovieGenres");
                                      });

但首先在Genre实体中添加Movies集合属性:

public class Genre
{
 //...
 public virtual ICollection<Movie> Movies{ get; set; }
}