Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 收集被修改;枚举操作可能不会执行,即使在创建当前对象的副本时也是如此_Linq_Entity Framework - Fatal编程技术网

Linq 收集被修改;枚举操作可能不会执行,即使在创建当前对象的副本时也是如此

Linq 收集被修改;枚举操作可能不会执行,即使在创建当前对象的副本时也是如此,linq,entity-framework,Linq,Entity Framework,我有以下存储库方法:- public void DeleteVM(int id, string username) { var VM = tms.TMSVirtualMachines.SingleOrDefault(a => a.TMSVirtualMachineID == id); var auditinfo = IntiateTechnologyAudit(tms.AuditActions.SingleOrDefault(

我有以下存储库方法:-

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
消息=集合已修改;枚举操作可能无法执行 执行。Source=System.Core StackTrace: 位于System.Collections.Generic.HashSet`1.Enumerator.MoveNext()


尽管我已经创建了虚拟机的副本,并对其执行了foreach操作。

但您需要执行浅拷贝,而不是参考拷贝。即使你复制了它,你也只复制了引用,所以你在相同的
HashSet
上枚举,不管怎样,你都要从中删除内容。 您需要做的是在此基础上构造另一个可枚举项,如
列表
。像这样:

var vm2 = new List<YourType>(VM.Technology.TechnologyIPs);
foreach(var ip in vm2)
{
    tms.TechnologyIPs.Remove(ip);
}
var vm2=新列表(VM.Technology.TechnologyIPs);
foreach(vm2中的var ip)
{
tms.TechnologyIPs.Remove(ip);
}

但在我的例子中,虚拟机不是一个列表,而是一个单独的实体。TMSVirtualMachines?