【问题标题】:Design simple code first movies database (many to many) EF设计简单的代码优先电影数据库(多对多)EF
【发布时间】:2017-04-01 00:51:15
【问题描述】:

我正在做一些关于 ASP MVC 的教程,视频中的那个人每部电影只使用一种类型,但我很想知道如何让一部电影有多种类型。例如,我如何制作这段代码:

public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Genre> Genre { get; set; }
}

public class Genre
{
    public int Id { get; set; }
    public string Name { get; set; }
}

像这样生成一些表:

电影

  • Id(主键)
  • 姓名

类型

  • Id(主键)
  • 姓名

MovieGenresRelation

  • Id(主键)
  • MovieId(引用 Movie.Id)
  • GenreId(参考 Genre.Id)

我尝试添加 MovieGenresRelation 类,但是如何将引用属性添加到 Movie 类? 无论如何,我认为这不是我应该这样做的方式,所以请指出正确的方向。

【问题讨论】:

  • 非常确定 Genre 只需要一个新属性:public ICollection&lt;Movie&gt; Movies { get; set; }。您可以查看this example,您可以将其用作示例。
  • Entityframework 可以创建您所需要的一切。如果您想为电影添加新流派,只需提取电影并将所需的流派添加到流派列表中,然后再次保存即可。
  • 您可能会考虑更新帖子标题,因为您描述的是many-to-many 关系。
  • @DrewKennedy 看来我错了,这正是我们需要的。
  • @IvanStoev 是的。

标签: c# sql-server entity-framework


【解决方案1】:

您走在正确的轨道上(您描述了多对多关系)。

您实际上可以在 EF6 中的关系两侧使用 ICollection 来完成此操作,但在 EFCore 中,您必须自己制作中间表。在 EF6 中,您可以将其添加到 Genre:

public virtual ICollection<Movie> Movies {get; set;}

至于中间 go 中的引用属性,只需按照您期望的方式添加它们:

public virtual Movie Movie {get; set;}
public virtual Genre Genre {get; set;}

主要区别在于Movie 和Genre 中的属性将指向MovieGenreRelation 而不是彼此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多