Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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
C# db.SaveChanges()爆炸并出现事务异常_C#_Asp.net_Sql_Linq - Fatal编程技术网

C# db.SaveChanges()爆炸并出现事务异常

C# db.SaveChanges()爆炸并出现事务异常,c#,asp.net,sql,linq,C#,Asp.net,Sql,Linq,以下方法导致第一个db.SaveChanges()引发异常: (由于会话中正在运行其他线程,因此不允许新事务。) 第一个db.SaveChanges()是确保不再插入同名的新产品 我如何解决这个问题?提前谢谢 为我工作: 谢谢。不知道为什么会发生这种情况,但是如果您还检查了db.dlc\u产品的Local集合,则不需要第一个SaveChanges(): foreach (var product in dlc_products.ToList()) { var dlc_product = db

以下方法导致第一个
db.SaveChanges()
引发异常: (由于会话中正在运行其他线程,因此不允许新事务。)

第一个
db.SaveChanges()
是确保不再插入同名的新产品

我如何解决这个问题?提前谢谢

为我工作:
谢谢。

不知道为什么会发生这种情况,但是如果您还检查了
db.dlc\u产品的
Local
集合,则不需要第一个
SaveChanges()

foreach (var product in dlc_products.ToList())
{
   var dlc_product = db.dlc_Products.SingleOrDefault(p => p.name == product.name)
       ?? db.dlc_Products.Local.SingleOrDefault(p => p.name == product.name);
    ...
}
新对象将添加到
本地
集合


请注意,
db.dlc\u Products.Join(db.dlc\u Products.Local)
看起来效率更高,但它不会编译,相反,它会为每个调用查询整个
db.dlc\u产品。

我认为它更像是通过返回IEnumerable来区分的。。。只要说‘为什么不调用一次
SaveChanges()
,让数据库处理重复的名称。我该如何让数据库处理重复的名称呢?这不也会返回异常吗?我不确定。很好,我试图找到一种方法在本地检查它,而不是点击数据库,从来都不知道
Local
的存在。现在将重试。好的,这是ObjectContext,没有DbContext。在ObjectContext中查询本地对象有点困难。如何做到这一点,请参见段落DbSet.Local。当然,您也可以简单地使用list对象来存储迄今为止添加的新产品。
                    var Local = db.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added)
                        .Where(es => es.Entity is dlc_Product).Select(es => es.Entity as dlc_Product);
                    var dlc_product = db.dlc_Products.SingleOrDefault(p => p.name == product.name)
                        ?? Local.SingleOrDefault(p => p.name == product.name);
foreach (var product in dlc_products.ToList())
{
   var dlc_product = db.dlc_Products.SingleOrDefault(p => p.name == product.name)
       ?? db.dlc_Products.Local.SingleOrDefault(p => p.name == product.name);
    ...
}