Я разработал проект базы данных в редакторе диаграмм базы данных Visual Studio и создал все свои таблицы из этого. Я также создал класс Linq to SQL и добавил свои таблицы для создания объектов для каждой таблицы. Я столкнулся с проблемой при попытке вставить новые записи в базу данных.
Например:
Допустим, у меня есть две таблицы: исполнители и альбомы. Один исполнитель может иметь несколько альбомов (один ко многим). Альбом имеет поле ArtistID, которое является FK для PK ArtistID в таблице Artist. Их идентификаторы - это GUID, которые автоматически генерируются базой данных.
Теперь в моем коде я создаю новый объект Album (называемый myAlbum) и устанавливаю для его объекта Artist значение Artist, которое уже находится в базе данных (myArtist).
Если я сделаю что-то вроде этого:
DatabaseDataContext context = new DatabaseDataContext();
context.Albums.InsertOnSubmit(myAlbum);
context.SubmitChanges();
Я получаю исключение SqlException: "Нарушение ограничения PRIMARY KEY 'PK_Artist'. Невозможно вставить дубликат ключа в объект 'dbo.Artist'.
Заявление было прекращено. "
Если я сравню myAlbum.Artist с Artist в базе данных, Linq скажет, что они равны, поэтому он знает, что это один и тот же объект.
Как заставить Linq вставить новый объект Album и связать его с уже существующим исполнителем в базе данных, не пытаясь снова вставить Artist?