此问题与我之前提出的问题类似。当我使用实体框架(EF)查询数据时,我总是使用MergeOption.NoTracking
选项,因为我最终获取了我生成的EF对象并将它们映射到视图模型,这些模型具有在属性上修饰的可爱属性以强制执行验证等等
我正在尝试使用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();
}
}
答案 0 :(得分:2)
Stub Entities非常有用......
var productVersion = new ProductVersion() { Id = productVersionId };
supportContext.AttachTo("ProductVersions", productVersion);
这是一个很好的article
在上述情况下,当附加productVersion
被分配给product versions
'实体时,productversion实体会附加到上下文,并附加EntityState=Added
。整个图表将在上下文中。