Saat ini saya mendapatkan kesalahan ini:
System.Data.SqlClient.SqlException: Transaksi baru tidak diizinkan karena ada utas lain yang berjalan di sesi.
saat menjalankan kode ini:
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 - Model ini duduk di database di Server Dev kami. Model # 1 http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/bdb2b000-6e60-4af0-a7a1-2bb6b05d8bc1/Model1.png
Model # 2 - Model ini duduk di database di Server Prod kami dan diperbarui setiap hari dengan umpan otomatis. alt teks http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/4260259f-bce6-43d5-9d2a-017bd9a980d4/Model2.png
Catatan - Item yang dilingkari merah di Model # 1 adalah bidang yang saya gunakan untuk "memetakan" ke Model # 2. Harap abaikan lingkaran merah pada Model # 2: yaitu dari pertanyaan lain yang saya jawab sekarang.
Catatan: Saya masih perlu memasukkan cek isDeleted sehingga saya bisa menghapusnya dengan lembut dari DB1 jika sudah keluar dari inventaris klien kami.
Yang ingin saya lakukan, dengan kode khusus ini, adalah menghubungkan perusahaan di DB1 dengan klien di DB2, dapatkan daftar produk mereka dari DB2 dan masukkan di DB1 jika belum ada di sana. Pertama kali melalui harus menjadi tarikan penuh inventaris. Setiap kali dijalankan di sana setelah tidak ada yang terjadi kecuali inventaris baru masuk pada umpan semalam.
Jadi pertanyaan besar - bagaimana saya mengatasi kesalahan transaksi yang saya dapatkan? Apakah saya perlu menjatuhkan dan menciptakan kembali konteks saya setiap kali melalui loop (tidak masuk akal bagi saya)?