Здравствуйте всем.
Использую 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?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
есть тестовое задание, на которое у меня очень мало времени, и что бы не попадать на грабли хотел бы у вас попросить проконсультировать(не...
Добрый всем деньРешил написать пятнашки на Unity3D, но застрял и приуныл
Стоит PostgreSQLВ ней таблица с чуть более, чем 300 тысяч строк
Я работаю с элементом Microsoft Ribbon WPF 2010