我正在使用三个表:电影、演员和导演,并且我需要创建额外的表来存储图像。
核心思想是能够添加照片,将其与电影关联,并指定照片中描绘的演员或导演(这些关联是可选的,或者只能与演员或导演关联)。这意味着在数据库模式中,我将在“Photo”表中拥有一条记录,在“PhotoConnection”表中拥有多个连接。
以下是表格的细分:
照片表:
照片连接表:
在“PhotoConnection”表中,“Type”字段是一个枚举,指示连接是否与电影、演员或导演相关。 “ObjectId”字段将相应实体的 ID 存储在这些表之一中。
主要挑战在于使用实体框架实现此架构,以便轻松搜索这些表。我怎样才能最好地实现这一目标?
我认为配置表格的正确方法是:
public class Movie
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Actor> Actors { get; set; }
public IList<Director> Directors { get; set; }
public IList<Photo> Photos { get; set; }
}
public class Actor
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Movie> Movies { get; set; }
public IList<Photo> Photos { get; set; }
}
public class Director
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Movie> Movies { get; set; }
public IList<Photo> Photos { get; set; }
}
public class Photo
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string URL { get; set; }
public int MovieId { get; set; }
[DeleteBehavior(DeleteBehavior.NoAction)]
public Movie Movie { get; set; }
public IList<Actor> Actors { get; set; }
public IList<Director> Directors { get; set; }
}
显然,为了处理所有(多对多)关系,EF 将创建一些额外的表,但不用担心它们,并根据需要对这四个表使用 LINQ 查询...