मुझे वर्तमान में यह त्रुटि मिल रही है:
System.Data.SqlClient.SqlException: नए लेन-देन की अनुमति नहीं है क्योंकि सत्र में अन्य थ्रेड चल रहे हैं।
इस कोड को चलाते समय:
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;
}
}
}
मॉडल # 1 - यह मॉडल हमारे देव सर्वर पर एक डेटाबेस में बैठता है। मॉडल # 1 http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/bdb2b000-6e60-4af0-a7a1-2bb6b6b5d8bc1/Model1.png
मॉडल # 2 - यह मॉडल हमारे प्रोडक्ट सर्वर पर एक डेटाबेस में बैठता है और प्रत्येक दिन स्वचालित फीड द्वारा अपडेट किया जाता है। alt text http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/4260259f-bce6-43d5-9d2a-017bd9a80d4/Model2.png
नोट - मॉडल # 1 में लाल परिक्रमा की गई वस्तुएं वे फ़ील्ड हैं जिनका मैं मॉडल # 2 में "मैप" करने के लिए उपयोग करता हूं। कृपया मॉडल # 2 में लाल हलकों को नजरअंदाज करें: यह एक और सवाल है जो मेरे पास था जो अब उत्तर दिया गया है।
नोट: मुझे अभी भी एक हटाए गए चेक में डालने की आवश्यकता है ताकि मैं इसे DB1 से हटा सकता हूं यदि यह हमारे क्लाइंट की इन्वेंट्री से बाहर चला गया है।
मैं केवल इस विशेष कोड के साथ करना चाहता हूं, DB1 में एक कंपनी को DB2 में एक ग्राहक के साथ जोड़ रहा हूं, DB2 से उनकी उत्पाद सूची प्राप्त करें और DB1 में इसे सम्मिलित करें यदि यह पहले से ही नहीं है। पहली बार के माध्यम से सूची का एक पूरा पुल होना चाहिए। हर बार इसे तब तक चलाया जाता है जब तक कि कुछ नहीं होना चाहिए जब तक कि रात में फ़ीड पर नई सूची न आए।
तो बड़ा सवाल है - मुझे जो ट्रांज़ैक्शन एरर मिल रहा है, उसे कैसे हल करूं? क्या मुझे हर बार छोरों के माध्यम से अपने संदर्भ को छोड़ने और फिर से बनाने की ज़रूरत है (मुझे इससे कोई मतलब नहीं है)?