C# Entity Framework. Не работает добавление записи в БД

242
14 февраля 2018, 08:58

Здравствуйте всем.

Использую Model First подход. Есть две сущности: Catalog и Book. Отношение между ними один-ко-многим. После создании модели сформировал автоматически классы для Catalog и Book:

namespace Library
{
    using System;
    using System.Collections.Generic;
    public partial class Catalog
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Catalog()
        {
            this.Books = new HashSet<Book>();
        }
        public System.Guid Id { get; set; }
        public string Name { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Book> Books { get; set; }
    }
}

namespace Library
{
    using System;
    using System.Collections.Generic;
    public partial class Book
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Book()
        {
            this.Orders = new HashSet<Order>();
        }
        public System.Guid Id { get; set; }
        public string Name { get; set; }
        public string Genre { get; set; }
        public string Author { get; set; }
        public string Year { get; set; }
        public virtual Catalog Catalog { get; set; }
    }
}

Класс контекста так выглядит:

namespace Library
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    public partial class LibraryModelContainer : DbContext
    {
        public LibraryModelContainer()
            : base("name=LibraryModelContainer")
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
        public virtual DbSet<Book> Books { get; set; }
        public virtual DbSet<Catalog> Catalogs { get; set; }
    }
}

Далее я хочу осуществить добавление записей в таблицы БД для Catalog и Book. Делаю таким образом:

private void AddUpdateRecord_Click(object sender, RoutedEventArgs e)
{
    using (LibraryModelContainer dbContainer = new LibraryModelContainer())
    {
        Catalog catalog = new Catalog
        {
            Id = Guid.NewGuid(),
            Name = CatalogTextBox.Text
        };
        dbContainer.Catalogs.Add(catalog);
        dbContainer.SaveChanges();
        _window.CatalogDataGrid.ItemsSource = dbContainer.Catalogs.ToList();
    }
}

private void AddUpdateRecord_Click(object sender, RoutedEventArgs e)
{
    using (LibraryModelContainer dbContainer = new LibraryModelContainer())
    {
            Book book = new Book
            {
                Id = Guid.NewGuid(),
                Name = BookAuthorTextBox.Text,
                Genre = BookGenreComboBox.Text,
                Author = BookAuthorTextBox.Text,
                Year = BookYearTextBox.Text,
                Catalog = (Catalog) BookCatalogComboBox.SelectedItem,
            };
            dbContainer.Books.Add(book);
            dbContainer.SaveChanges();
            _window.BookDataGrid.ItemsSource = dbContainer.Books.ToList();
    }
}

При добавлении записи в таблицу Catalog, у меня проблем не возникает, поскольку всё понятно, как это делается. Когда же я хочу добавить книгу в таблицу Book, то здесь (dbContainer.SaveChanges();) возникает исключение:

1) UpdateException: При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении. 2) SqlException: Violation of PRIMARY KEY constraint 'PK_Catalogs'. Cannot insert duplicate key in object 'dbo.Catalogs'. The duplicate key value is (aea5ebab-5453-449e-b181-7bee12ce7a3c). The statement has been terminated.

Что я конкретно делаю не так при добавлении записи в таблицу Book?

READ ALSO
C# тестовое задание [требует правки]

C# тестовое задание [требует правки]

есть тестовое задание, на которое у меня очень мало времени, и что бы не попадать на грабли хотел бы у вас попросить проконсультировать(не...

328
Перемешивание массива в Unity3D

Перемешивание массива в Unity3D

Добрый всем деньРешил написать пятнашки на Unity3D, но застрял и приуныл

308
Очень долгое выполнение запросов через DbContext

Очень долгое выполнение запросов через DbContext

Стоит PostgreSQLВ ней таблица с чуть более, чем 300 тысяч строк

198
C# Ribbon сохранение и восстановление Quick Acces ToolBar item&#39;ов

C# Ribbon сохранение и восстановление Quick Acces ToolBar item'ов

Я работаю с элементом Microsoft Ribbon WPF 2010

223