我有以下存储库方法: -
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()
虽然我已经创建了VM的副本,但是我对它进行了预测..
答案 0 :(得分:1)
您需要执行浅拷贝,而不是参考副本。即使你复制它,你也只复制引用,所以你要枚举的是与你要删除的东西相同的HashSet
。
你需要做的是构造另一个可枚举的,比如List<T>
。像这样:
var vm2 = new List<YourType>(VM.Technology.TechnologyIPs);
foreach(var ip in vm2)
{
tms.TechnologyIPs.Remove(ip);
}