【发布时间】:2019-03-28 19:31:02
【问题描述】:
我将 vs2017 与 entityframework 6.1.0 和 winforms 一起使用。至于实体框架,我使用代码优先。我需要制作一个电影应用程序,我已经为他们制作了所有课程Movie、Genre 和Cast(演员)。
所有Genres 都预先插入到数据库中。使用 update-database 时,会创建所有内容,包括连接表 moviegenre 和 movie cast 以及外键。当我插入一个电影对象时。它链接了流派演员和电影中的 id,但它也重新插入了每种流派,这意味着我有重复。我当然只想要链接。到目前为止,这是我的代码。
电影类:
public class Movie
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MovieId { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
//[ForeignKey("GenreId")]
public virtual List<Genre> Genre { get; set; }
//[ForeignKey("CastId")]
public virtual List<Cast> cast { get; set; }
[Required]
public int GenreId { get; set; }
[Required]
public int CastId { get; set; }
[Display(Name = "Release Date")]
public DateTime ReleaseDate { get; set; }
public Movie()
{
Genre = new List<Genre>();
cast = new List<Cast>();
}
}
流派和演员表(两个类别相同)
public class Genre
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int GenreId { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
public List<Movie> Movies { get; set; }
}
当然还有我的代码(这段代码来自按钮单击事件,用于将电影添加到数据库中。):
private void btnAddMovie_Click(object sender, EventArgs e)
{
List<Genre> genrelist = new List<Genre>();
List<Cast> castlist = new List<Cast>();
var movie = new Movie();
movie.Name = txtTitle.Text;
movie.ReleaseDate = released;
//creating lists
foreach (string item in lbgenre2.Items)
{
var genre = new Genre();
genre.Name = item;
genrelist.Add(genre);
}
foreach (string item in lbCast2.Items)
{
var cast = new Cast();
cast.Name = item;
castlist.Add(cast);
}
movie.Genre = genrelist;
movie.cast = castlist;
_context.movies.Add(movie);
Save();
}
private async void Save()
{
await _context.SaveChangesAsync();
}
它链接并重新插入它我做错了什么?
【问题讨论】:
-
你又在创建流派,你想在电影添加中创建流派吗?还是所有的基因都已经创建了?
-
插入电影时,不要创建新的流派对象,而是从流派表中查询流派列表,并将该列表分配给 Movie.Genre。
-
是的,流派已预先插入到数据库中。所以我将 _context.genres.tolist() 放入 alistbox。我从该特定电影中选择流派并将它们放在另一个列表框中,然后从第二个列表框创建列表
标签: c# .net winforms entity-framework-6