Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityFramework:将现有的一对多关系映射到模型_C#_Linq_Entity Framework_Sqlite_One To Many - Fatal编程技术网

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

C# EntityFramework:将现有的一对多关系映射到模型,c#,linq,entity-framework,sqlite,one-to-many,C#,Linq,Entity Framework,Sqlite,One To Many,我正在使用实体框架使用Linq到Sqlite ORM。由于linqtosqlite本身无法使用代码优先的方法基于模型创建表,因此我不得不重用现有的表模式来构建实体模型设计。以下是我预期的模型设计: public class Movie { public int MovieId { get; set; } public string Title { get; set; } public virtual ICollection<Genre> Genres { ge

我正在使用实体框架使用Linq到Sqlite ORM。由于linqtosqlite本身无法使用代码优先的方法基于模型创建表,因此我不得不重用现有的表模式来构建实体模型设计。以下是我预期的模型设计:

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; }
}
所以,一部电影基本上可以有多种类型。然而,我希望从类型实体到电影实体有任何关系

下面是我重写的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;
        }
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
尝试
{
modelBuilder.Entity()
.HasMany(m=>m.Genres)
.WithOptional()
.Map(mg=>
{
mg.ToTable(“电影流派”);
mg.MapKey(“GenreId”);
});
}
捕获(例外情况除外)
{
掷骰子;
}
}
我收到一条异常消息=在模型中找不到指定的表“MovieGenre”。确保已正确指定表名


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

这种关系不是一对多的关系。我不是SQL Lite方面的专家,但我认为最后一个表应该是这样的(见下图):

要在EF中映射该关系,配置如下:

modelBuilder.Entity<Movie>().HasMany(m => m.Genres)
                             .WithMany(g =>g.Movies)
                             .Map(c =>{  c.MapLeftKey("MovieId");
                                         c.MapRightKey("GenreId");
                                         c.ToTable("MovieGenres");
                                      });
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)
)
modelBuilder.Entity<Movie>().HasMany(m => m.Genres)
                             .WithMany(g =>g.Movies)
                             .Map(c =>{  c.MapLeftKey("MovieId");
                                         c.MapRightKey("GenreId");
                                         c.ToTable("MovieGenres");
                                      });
public class Genre
{
 //...
 public virtual ICollection<Movie> Movies{ get; set; }
}