Пакет Visual Studio NuGet необходимо обновить для новой версии набора инструментов
У меня просто возникла проблема с подключением libpng с Visual Studio 2013. Проблема в том, что в файле пакета были только библиотеки для Visual Studio 2010 и 2012.
Правильное решение - надеяться, что разработчик выпустит обновленный пакет и затем обновит его, но он работал для меня, взломав дополнительную настройку для VS2013, указав на файлы библиотеки VS2012.
Я отредактировал пакет (в папке packages
внутри каталога решения), найдя packagename\build\native\packagename.targets
и внутри этого файла, скопировав все секции v110
. Я изменил v110
на v120
в полях условий только очень осторожно, чтобы пути с именами файлов были все как v110
. Это просто позволило Visual Studio 2013 подключиться к библиотекам на 2012 год, и в этом случае он работал.
Вам не хватает, чтобы присоединить существующих авторов к контексту. Вы можете сделать это так:
public void Create(BookDto bookDTO)
{
Book book = new Book();
book.InjectFrom<DeepCloneInjection>(bookDTO);
foreach (var author in book.Authors)
authorRepository.Attach(author);
bookRepository.Add(book);
unitOfWork.Commit();
}
, где только общие методы Attach
вызывают вызов dbset.Attach(entity);
. Я предполагаю, что все репозитории (authorRepository
и bookRepository
) используют один и тот же экземпляр контекста. В противном случае вышеуказанное не будет работать.
Тот факт, что AuthorId
уже существует в базе данных, не имеет значения. EF не проверяет, существует ли идентификатор сначала по запросу. Если вы назове Add
на графике объекта отдельных объектов, он пытается вставить весь граф, создав инструкции INSERT для родителя и для всех детей. Присоединив детей, вы фактически отключите инструкции INSERT для них.