SORU
21 Ocak 2010, PERŞEMBE


Varlık Çerçevesi - Yeni işlem SqlException diğer konuları oturumda çalışan olduğundan izin verilmez

Şu anda bu hatayı alıyorum:

Sistem.Veri.SqlClient.SqlException: Yeni işlem başka bir iş parçacığı oturumda çalışan vardır, çünkü İzin Verilmiyor.

bu kod çalışırken:

public class ProductManager : IProductManager
{
    #region Declare Models
    private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString);
    private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString);
    #endregion

    public IProduct GetProductById(Guid productId)
    {
        // Do a quick sync of the feeds...
        SyncFeeds();
        ...
        // get a product...
        ...
        return product;
    }

    private void SyncFeeds()
    {
        bool found = false;
        string feedSource = "AUTO";
        switch (feedSource) // companyFeedDetail.FeedSourceTable.ToUpper())
        {
            case "AUTO":
                var clientList = from a in _dbFeed.Client.Include("Auto") select a;
                foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
                {
                    var companyFeedDetailList = from a in _dbRiv.AutoNegotiationDetails where a.ClientID == client.ClientID select a;
                    foreach (RivWorks.Model.Negotiation.AutoNegotiationDetails companyFeedDetail in companyFeedDetailList)
                    {
                        if (companyFeedDetail.FeedSourceTable.ToUpper() == "AUTO")
                        {
                            var company = (from a in _dbRiv.Company.Include("Product") where a.CompanyId == companyFeedDetail.CompanyId select a).First();
                            foreach (RivWorks.Model.NegotiationAutos.Auto sourceProduct in client.Auto)
                            {
                                foreach (RivWorks.Model.Negotiation.Product targetProduct in company.Product)
                                {
                                    if (targetProduct.alternateProductID == sourceProduct.AutoID)
                                    {
                                        found = true;
                                        break;
                                    }
                                }
                                if (!found)
                                {
                                    var newProduct = new RivWorks.Model.Negotiation.Product();
                                    newProduct.alternateProductID = sourceProduct.AutoID;
                                    newProduct.isFromFeed = true;
                                    newProduct.isDeleted = false;
                                    newProduct.SKU = sourceProduct.StockNumber;
                                    company.Product.Add(newProduct);
                                }
                            }
                            _dbRiv.SaveChanges();  // ### THIS BREAKS ### //
                        }
                    }
                }
                break;
        }
    }
}

Model #1 - Bu model bizim Dev Sunucu üzerinde bir veritabanı oturur. Model #1

Model #2 - Bu model bizim Prod Server üzerinde bir veritabanı oturur ve otomatik beslemeleri tarafından her gün güncellenen. alt text

Not - kırmızı Model #1 öğe kullanım alanları daire için "Göster" Model #2. Lütfen Model kırmızı daireler #2 Yoksay: şimdi cevap verdi. ben başka bir soru.

Not: ben hala eğer müvekkilimizin stok dışarı gitti eğer yumuşak AB1 silin, böylece isDeleted bir kontrol koymak gerekir.

Tek istediğim, bu özel kod, connect bir şirket ile bir müşteri DB1 DB2, kendi ürün listesinden DB2 ve EKLEMEK AB1 değil zaten. İlk kez aracılığıyla envanter tam bir çek olması gerekir. Her zaman yeni bir şey envanter gece boyunca yem gelmediyse olur sonra orada çalıştırın.

Büyük bir soru - nasıl hareket alıyorum hata çözmek? Damla ve döngüler (bana mantıklı gelmiyor) benim ortam, her zaman yeniden gerekir mi?

CEVAP
1 ŞUBAT 2010, PAZARTESİ


Çok saç koparma sonra foreach döngüler suçluları olduğunu keşfettim. Yapılması gereken, EF Ara ama IList<T> hedef bir tür haline dönüş IList<T> döngü için.

Örnek:

IList<Client> clientList = from a in _dbFeed.Client.Include("Auto") select a;
foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
{
   var companyFeedDetailList = from a in _dbRiv.AutoNegotiationDetails where a.ClientID == client.ClientID select a;
    // ...
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Julia Graf

    Julia Graf

    6 Mayıs 2006
  • TomSka

    TomSka

    30 Mayıs 2006