2015-12-08 2 views
0

Я создал базу данных с использованием метода кода. Теперь, когда я пытаюсь добавить показ в свою базу данных Cinema, я получаю DbupdateException. И он говоритИспользование СУБД Entity Framework с ошибкой базы данных

Нарушение ограничения PRIMARY KEY «PK_dbo.Movies». Невозможно вставить дубликат ключа в объект «dbo.Movies». Значение дублирующегося ключа (Комната)

Я не понимаю, почему. Я не добавляю новый фильм с именем 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

Я хотел бы предложить вам изменить вашу модель, показывающая, чтобы иметь свойство, которое является фильм 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, и вы получаете это исключение.

+0

Спасибо! Это очень помогло мне! –

+0

@ RičardasMikelionis Я очень рад, что вы решили свою проблему !! –

Смежные вопросы