使用 Entity Framework 代码优先数据库问题
Using Entity Framework code-first database issue
我使用代码优先方法创建了一个数据库。现在,当我尝试向我的 Cinema
数据库添加放映时,我得到一个 DbupdateException
。它说
Violation of PRIMARY KEY constraint 'PK_dbo.Movies'. Cannot insert duplicate key in object 'dbo.Movies'. The duplicate key value is (The Room)
我不明白为什么。我不会添加名称为 The Room
的新电影,我会添加带有新密钥的放映。
namespace Cinema3Project.Tables
{
class Showing
{
[Key]
public int Number { get; set; }
public DateTime Date { get; set; }
public TimeSpan Time { get; set; }
public virtual Movie Movie { get; set; }
public virtual Screen Screen { get; set; }
}
}
class Movie
{
[Key]
public string Name { get; set; }
public string Director { get; set; }
public string Genre { get; set; }
public string Language { get; set; }
public int LengthMin { get; set; }
}
插入方法如下所示:
using (var db = new CinemaContext())
{
db.Showings.Add(showing);
db.SaveChanges();
}
我建议您修改 Showing 模型以获得 属性 电影 FK。因此,您将设置此 属性 而不是设置 Movie 属性.
public class Showing
{
public string MovieName { get; set; }
[ForeignKye("MovieName")]
public virtual Movie Movie { get; set; }
}
然后你设置 MovieName
//showing.Movie do not set this property
showing.MovieName = movie.Name;
using (var db = new CinemaContext())
{
db.Showings.Add(showing);
db.SaveChanges();
}
由于您正在使用上下文的新实例,当您对 EF 说添加您的放映时,它会尝试添加整个对象图,此时,EF 认为您的放映对象的电影是一个新的实体,因此 EF 也尝试添加 Movie,但出现此异常。
我使用代码优先方法创建了一个数据库。现在,当我尝试向我的 Cinema
数据库添加放映时,我得到一个 DbupdateException
。它说
Violation of PRIMARY KEY constraint 'PK_dbo.Movies'. Cannot insert duplicate key in object 'dbo.Movies'. The duplicate key value is (The Room)
我不明白为什么。我不会添加名称为 The Room
的新电影,我会添加带有新密钥的放映。
namespace Cinema3Project.Tables
{
class Showing
{
[Key]
public int Number { get; set; }
public DateTime Date { get; set; }
public TimeSpan Time { get; set; }
public virtual Movie Movie { get; set; }
public virtual Screen Screen { get; set; }
}
}
class Movie
{
[Key]
public string Name { get; set; }
public string Director { get; set; }
public string Genre { get; set; }
public string Language { get; set; }
public int LengthMin { get; set; }
}
插入方法如下所示:
using (var db = new CinemaContext())
{
db.Showings.Add(showing);
db.SaveChanges();
}
我建议您修改 Showing 模型以获得 属性 电影 FK。因此,您将设置此 属性 而不是设置 Movie 属性.
public class Showing
{
public string MovieName { get; set; }
[ForeignKye("MovieName")]
public virtual Movie Movie { get; set; }
}
然后你设置 MovieName
//showing.Movie do not set this property
showing.MovieName = movie.Name;
using (var db = new CinemaContext())
{
db.Showings.Add(showing);
db.SaveChanges();
}
由于您正在使用上下文的新实例,当您对 EF 说添加您的放映时,它会尝试添加整个对象图,此时,EF 认为您的放映对象的电影是一个新的实体,因此 EF 也尝试添加 Movie,但出现此异常。