使用Entity Framework代码优先数据库问题

时间:2015-12-08 01:50:48

标签: c# database entity-framework visual-studio ef-code-first

我使用代码优先方法创建了一个数据库。现在,当我尝试向我的Cinema数据库添加展示时,我得到DbupdateException。它说

  

违反PRIMARY KEY约束'PK_dbo.Movies'。无法在对象'dbo.Movies'中插入重复键。重复键值为(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();
}

1 个答案:

答案 0 :(得分:1)

我建议您修改您的显示模型,使其具有Movie 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也试图添加电影,你得到这个例外。