আমি বর্তমানে এই ত্রুটিটি পাচ্ছি:
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
মডেল # 2 - এই মডেলটি আমাদের প্রোড সার্ভারে একটি ডাটাবেসে বসে এবং স্বয়ংক্রিয় ফিডগুলির মাধ্যমে প্রতিদিন আপডেট হয়। ALT পাঠ্য
দ্রষ্টব্য - মডেল # 1 এর লাল বৃত্তাকার আইটেমগুলি ক্ষেত্রগুলি আমি মডেল # 2 তে "মানচিত্র" করতে ব্যবহার করি। দয়া করে মডেল # 2 এর লাল চেনাশোনাগুলিকে উপেক্ষা করুন: এটি আমার একটি অন্য প্রশ্ন যা এখন উত্তর পেয়েছে from
দ্রষ্টব্য: আমার এখনও একটি আইএসলেট মুছে ফেলা চেক স্থাপন করা দরকার যাতে এটি আমাদের ক্লায়েন্টের ইনভেন্টরির বাইরে চলে গেলে আমি ডিবি 1 থেকে এটিকে নরমভাবে মুছতে পারি।
এই বিশেষ কোডটি দিয়ে আমি যা যা করতে চাই তা হ'ল ডিবি 1-র কোনও সংস্থাকে ডিবি 2-র একটি ক্লায়েন্টের সাথে সংযুক্ত করা, তাদের পণ্য তালিকা ডিবি 2 থেকে পেতে এবং এটি ইতিমধ্যে সেখানে না থাকলে ডিবি 1 এ এটি লিখুন। প্রথমবারের মাধ্যমে সামগ্রীর সামগ্রীর পুরো টানা হওয়া উচিত। প্রতিবার যখন সেখানে চালানো হয় তখন কোনও কিছুই ঘটবে না যতক্ষণ না রাত্রে ফিডে নতুন জায় না আসে।
সুতরাং বড় প্রশ্ন - আমি যে লেনদেনের ত্রুটি পাচ্ছি তা কীভাবে সমাধান করব? লুপগুলির মাধ্যমে প্রতিবার আমার প্রসঙ্গটি কীভাবে ফেলে এবং পুনরায় তৈরি করা দরকার (আমার তা বোঝায় না)?