首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架中的SqlException, 不允许新的Business,因为会话中还有其他线程正在运行?

实体框架中的SqlException, 不允许新的Business,因为会话中还有其他线程正在运行?

提问于 2017-12-20 10:18:21
回答 2关注 0查看 371

我目前得到这个错误:

  System.Data.SqlClient.SqlException:不允许新的Business,因为会话中还有其他线程正在运行。

运行这个代码时:

代码语言:txt
复制
public class ProductManager : IProductManage
代码语言:txt
复制
{
代码语言:txt
复制
    #region Declare Models
代码语言:txt
复制
    private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString);
代码语言:txt
复制
    private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString);
代码语言:txt
复制
    #endregion
代码语言:txt
复制
代码语言:txt
复制
    public IProduct GetProductById(Guid productId)
代码语言:txt
复制
    {
代码语言:txt
复制
        // Do a quick sync of the feeds...
代码语言:txt
复制
        SyncFeeds();
代码语言:txt
复制
        ...
代码语言:txt
复制
        // get a product...
代码语言:txt
复制
        ...
代码语言:txt
复制
        return product;
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    private void SyncFeeds()
代码语言:txt
复制
    {
代码语言:txt
复制
        bool found = false;
代码语言:txt
复制
        string feedSource = "AUTO";
代码语言:txt
复制
        switch (feedSource) // companyFeedDetail.FeedSourceTable.ToUpper())
代码语言:txt
复制
        {
代码语言:txt
复制
            case "AUTO":
代码语言:txt
复制
                var clientList = from a in _dbFeed.Client.Include("Auto") select a;
代码语言:txt
复制
                foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
代码语言:txt
复制
                {
代码语言:txt
复制
                    var companyFeedDetailList = from a in _dbRiv.AutoNegotiationDetails where a.ClientID == client.ClientID select a;
代码语言:txt
复制
                    foreach (RivWorks.Model.Negotiation.AutoNegotiationDetails companyFeedDetail in companyFeedDetailList)
代码语言:txt
复制
                    {
代码语言:txt
复制
                        if (companyFeedDetail.FeedSourceTable.ToUpper() == "AUTO")
代码语言:txt
复制
                        {
代码语言:txt
复制
                            var company = (from a in _dbRiv.Company.Include("Product") where a.CompanyId == companyFeedDetail.CompanyId select a).First();
代码语言:txt
复制
                            foreach (RivWorks.Model.NegotiationAutos.Auto sourceProduct in client.Auto)
代码语言:txt
复制
                            {
代码语言:txt
复制
                                foreach (RivWorks.Model.Negotiation.Product targetProduct in company.Product)
代码语言:txt
复制
                                {
代码语言:txt
复制
                                    if (targetProduct.alternateProductID == sourceProduct.AutoID)
代码语言:txt
复制
                                    {
代码语言:txt
复制
                                        found = true;
代码语言:txt
复制
                                        break;
代码语言:txt
复制
                                    }
代码语言:txt
复制
                                }
代码语言:txt
复制
                                if (!found)
代码语言:txt
复制
                                {
代码语言:txt
复制
                                    var newProduct = new RivWorks.Model.Negotiation.Product();
代码语言:txt
复制
                                    newProduct.alternateProductID = sourceProduct.AutoID;
代码语言:txt
复制
                                    newProduct.isFromFeed = true;
代码语言:txt
复制
                                    newProduct.isDeleted = false;
代码语言:txt
复制
                                    newProduct.SKU = sourceProduct.StockNumber;
代码语言:txt
复制
                                    company.Product.Add(newProduct);
代码语言:txt
复制
                                }
代码语言:txt
复制
                            }
代码语言:txt
复制
                            _dbRiv.SaveChanges(); // ### THIS BREAKS ### //
代码语言:txt
复制
                        }
代码语言:txt
复制
                    }
代码语言:txt
复制
                }
代码语言:txt
复制
                break;
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
}

模型#1 - 这个模型位于我们的开发服务器的数据库中。

、 http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/bdb2b000-6e60-4af0-a7a1-2bb6b05d8bc1/Model1.png

模型#2 - 此模型位于Prod服务器上的数据库中,并且每天都通过自动提要进行更新。

alt text http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/4260259f-bce6-43d5-9d2a-017bd9a980d4/Model2.png

注 - 模型#1中红圈的项目是我用来“映射”到模型#2的字段。请忽略模型2中的红色圆圈:这是我现在回答的另一个问题。

注意:我仍然需要放入一个isDeleted检查,以便我可以从DB1软删除它,如果它已经离开我们客户的库存。

所以最大的问题 - 我如何解决我所得到的交易错误? 我是否需要每次通过循环删除和重新创建我的上下文?

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档