0

我有以下存储库方法:-

public void DeleteVM(int id, string username)
        {
            var VM = tms.TMSVirtualMachines.SingleOrDefault(a => a.TMSVirtualMachineID == id);
            var auditinfo = IntiateTechnologyAudit(tms.AuditActions.SingleOrDefault(a => a.Name.ToUpper() == "DELETE").ID,
                    VM.Technology.TechnologyType.AssetTypeID,
                 username, VM.TMSVirtualMachineID);
            var technology = tms.Technologies.SingleOrDefault(a => a.TechnologyID == id);
            technology.IsDeleted = true;
            tms.Entry(technology).State = EntityState.Modified;
            var vm2 = VM;
            foreach(var ip in vm2.Technology.TechnologyIPs)
            {
            tms.TechnologyIPs.Remove(ip);

            }
            tms.TMSVirtualMachines.Remove(VM);
                      InsertOrUpdateTechnologyAudit(auditinfo);
        }

但我得到以下异常: -

System.InvalidOperationException 被捕获 HResult=-2146233079
Message=Collection 已修改;枚举操作可能无法执行。Source=System.Core StackTrace:在 System.Collections.Generic.HashSet`1.Enumerator.MoveNext()

尽管我已经创建了 VM 的副本并对其执行了 foreach ..

4

1 回答 1

1

你需要做一个浅拷贝,而不是参考拷贝。即使您将其复制过来,您也只会复制引用,因此您枚举的内容与HashSet您要从中删除内容的内容相同。您需要做的是List<T>在此之上构造另一个可枚举的对象,例如 a 。像这样:

var vm2 = new List<YourType>(VM.Technology.TechnologyIPs);
foreach(var ip in vm2)
{
    tms.TechnologyIPs.Remove(ip);
}
于 2013-08-19T13:12:57.587 回答