Tôi hiện đang nhận được lỗi này:
System.Data.SqlClient.SqlException: Giao dịch mới không được phép vì có các luồng khác đang chạy trong phiên.
trong khi chạy mã này:
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;
}
}
}
Mô hình # 1 - Mô hình này nằm trong cơ sở dữ liệu trên Dev Server của chúng tôi. Mô hình số 1 http://content.screencast.com/users/Keith.Barrows/ Folders / Jing / media / bdb2b000-6e60-4af0-a7a1-2bb6b05d8bc1/Model1.png
Mô hình # 2 - Mô hình này nằm trong cơ sở dữ liệu trên Máy chủ Prod của chúng tôi và được cập nhật mỗi ngày bằng các nguồn cấp dữ liệu tự động. văn bản thay thế http://content.screencast.com/users/Keith.Barrows/printers/Jing/media/4260259f-bce6-43d5-9d2a-017bd9a980d4/Model2.png
Lưu ý - Các mục được khoanh tròn màu đỏ trong Mô hình # 1 là các trường tôi sử dụng để "ánh xạ" sang Mô hình # 2. Hãy bỏ qua các vòng tròn màu đỏ trong Mô hình # 2: đó là từ một câu hỏi khác mà tôi đã trả lời.
Lưu ý: Tôi vẫn cần đưa vào kiểm tra isDelatted để tôi có thể xóa nó khỏi DB1 nếu nó đã hết hàng tồn kho của khách hàng.
Tất cả những gì tôi muốn làm, với mã cụ thể này, là kết nối một công ty trong DB1 với một máy khách trong DB2, lấy danh sách sản phẩm của họ từ DB2 và XÁC NHẬN nó trong DB1 nếu nó chưa có ở đó. Lần đầu tiên thông qua nên là một hàng tồn kho đầy đủ. Mỗi lần nó được chạy ở đó sau khi không có gì xảy ra trừ khi hàng tồn kho mới xuất hiện trên thức ăn qua đêm.
Vì vậy, câu hỏi lớn - làm thế nào để tôi giải quyết lỗi giao dịch tôi đang nhận được? Tôi có cần bỏ và tạo lại bối cảnh của mình mỗi lần qua các vòng lặp (không có ý nghĩa với tôi) không?