Şu anda bu hatayı alıyorum:
System.Data.SqlClient.SqlException: Oturumda çalışan başka iş parçacıkları olduğundan yeni işleme izin verilmiyor.
bu kodu çalıştırı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 Dev Server'ımızdaki bir veritabanında oturuyor. Model # 1 http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/bdb2b000-6e60-4af0-a7a1-2bb6b05d8bc1/Model1.png
Model # 2 - Bu model Prod Sunucumuzdaki bir veritabanında bulunur ve her gün otomatik beslemelerle güncellenir. alt metin http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/4260259f-bce6-43d5-9d2a-017bd9a980d4/Model2.png
Not - Model # 1'deki kırmızı daire içine alınmış öğeler Model # 2 ile "eşleştirmek" için kullandığım alanlardır. Lütfen Model # 2'deki kırmızı daireleri göz ardı edin: bu, şimdi yanıtlanan başka bir sorudan.
Not: Hala bir isDeleted çek koymak gerekir, böylece istemci envanter dışına gitti, DB1 yumuşak silebilirsiniz.
Tek yapmak istediğim, bu özel kod ile DB1'de bir şirkete DB2'de bir istemci bağlamak, DB2'den ürün listesini almak ve henüz orada değilse DB1'e INSERT. İlk kez envanter tam bir çekme olmalıdır. Her seferinde orada çalıştırıldığında, gece boyunca yeni envanter gelmedikçe hiçbir şey olmamalıdır.
Yani büyük soru - nasıl alıyorum işlem hatası çözmek için? Her seferinde döngülerden bağlamımı bırakıp yeniden oluşturmam gerekiyor mu (bana mantıklı değil)?