/ / SaveChanges on Relationship to Many to Many не вдається - c #, entity-framework

SaveChanges на багатьох до багатьох стосунків не вдається - c #, структура-сутність

Ось моя база:

І що він містить один фільм (ідентифікатори надходять із зовнішнього REST API):

Movie movie = Movie.CreateMovie(999, "MyFirstMovie");
movie.Kinds.Add(Kind.Create(123,"Adventure"));
movie.Kinds.Add(Kind.Create(124,"Comic"));
movie.Actors.Add(Person.Create(321,"John Wayne"));
movie.Directors.Add(Person.Create(120,"John Woo"));
_context.AddToMovies(movie);
_context.SaveChanges();

Тепер, коли я намагаюся вставити новий фільм, я часто маю виняток, який сказав, що я вставляю сутність, яка вже існує в основі.

Припустимо, я отримав ще один фільм про "Пригоди":

// Here all data comes from an external source and have no control over it.
using(Stream stream = myExternalStream)
{
Movie movie = Unserialize(stream);
_context.AddToMovies(movie);
}
// throws the exception because the kind "Adventure" already exists
_context.SaveChanges();

Як я можу уникнути цього винятку?

Відповіді:

1 для відповіді № 1

Я думаю, у вас буде чек, якщо Kind вже існує в БД. Якщо так, замініть тип на movie.Kinds колекція за типом, завантаженим з бази даних. Якщо ні, збережіть десеріалізований вид і створіть новий Kind сутність, наприклад так:

using(Stream stream = myExternalStream)
{
Movie movie = Unserialize(stream);
var newKindList = new List<Kind>();
foreach(var kind in movie.Kinds)
{
var kindInDB = _context.Kinds
.SingleOrDefault(k => k.KindId == kind.KindId);
if (kindInDB != null)
newKindList.Add(kindInDB);
else
newKindList.Add(kind);
}
movie.Kinds = newKindList;
_context.AddToMovies(movie);
}
_context.SaveChanges();

0 для відповіді № 2

Отримайте вид фільму замість того, щоб створювати його щоразу. Або це очевидно?