通过linq使用实体框架时,我从mysql数据库中删除数据,它是一个单线程程序,没有人正在使用db而不是我。每次我尝试通过以下方式删除实体:
private class ApplySchemaVendorExtensions : ISchemaFilter
{
public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
{
if (schema.properties != null)
{
foreach (var p in schema.properties)
{
switch (p.Key)
{
case "label":
p.Value.example = "Etichetta di esempio";
break;
case "value":
p.Value.example = "Valore di esempio";
break;
}
break;
}
}
}
}
当我db.table.Remove(entity);
怎么可能时,它会引发并发异常?
答案 0 :(得分:1)
试试这个:
try
{
db.table.DeleteOnSubmit(entity);
db.SubmitChanges();
}
catch(Exception e)
{
Console.WriteLine(e);
// Provide for exceptions.
}
答案 1 :(得分:0)
我在StackOverflow上找不到这个问题,所以我会发布解决方案,因为我自己发现了这个问题并且错误不会引导你找到解决方案:
如果您必须在foreach中执行操作,请使用数据库获取的结果列表,然后您必须删除结果
不要这样做:
List<Ducks> ducks = (from duck in db.Ducks select duck).ToList();
foreach (Ducks duck in ducks)
{
//TODO
db.Ducks.Remove(duck);
}
db.SaveChanges();
或者你会遇到并发错误。
您必须从他们的foreach中删除实体。
<强>解决方案:强>
List<Ducks> ducks = (from duck in db.Ducks select duck).ToList();
foreach (Ducks duck in ducks)
{
//TODO
}
db.Ducks.RemoveRange(ducks);
db.SaveChanges();