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 #2 - Bu model bizim Prod Server üzerinde bir veritabanı oturur ve otomatik beslemeleri tarafından her gün güncellenen.
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
Ç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;
// ...
}
Yeni işlem başka bir iş Varlık İçin ot...
Düzenle ve Devam ediyor: "Değişik...
Varlık Çerçevesi 4 yeni varlık skaler ...
Varlık Çerçevesi Üzerinde Başlatma/Ger...
Anahtar sözcük desteklenmiyor: "v...