Эта проблема аналогична моему ранее заданному вопросу. Когда я запрашиваю данные с использованием Entity Framework (EF), я всегда использую параметр MergeOption.NoTracking
, потому что в конечном итоге беру свои EF сгенерированные объекты и сопоставляю их, чтобы просматривать модели, которые имеют прекрасные атрибуты, украшенные в свойстве, для обеспечения проверки и т. Д.Добавление отношения внешнего ключа с Entity Framework
Я пытаюсь добавить внешний ключ с помощью EF, но в любое время я я получаю следующее исключение:
The object being attached to the source object is not attached to the same ObjectContext as the source object
Вот мой код:
public static void UpdateDownloadFileVersion(DownloadFile downloadFile, int[] selectedVersions) {
using (SupportEntity supportContext = new SupportEntity()) {
supportContext.DownloadFiles.Attach(downloadFile);
var productVersionIdsToAdd = (from v in selectedVersions
where (downloadFile.ProductVersions.Any(pv => pv.Id == v) == false)
select v).ToList();
foreach (var productVersionId in productVersionIdsToAdd) {
var productVersion = new ProductVersion() { Id = productVersionId };
downloadFile.ProductVersions.Attach(productVersion); //Exception happens here.
downloadFile.ProductVersions.Add(productVersion);
}
supportContext.SaveChanges();
}
}
Попробуйте что-то вроде этого: var productVersion = new ProductVersion() {Id = productVersionId}; supportContext.ProductVersions.AttachTo («ProductVersions», productVersion); –
@DmitrySavy - Я думаю, вы имели в виду 'supportContext.AttachTo (« ProductVersions », productVersion)'. Но, да, это трюк, хотя я действительно не понимаю, почему. Как «AttachTo» отличается от «ProductVersions.Attach»? Мне также не нравится это решение, потому что код не сильно набрал сейчас, и изменение может остаться незамеченным за пределами компиляции. –