Je suis actuellement à obtenir cette erreur:
Système.Les données.SqlClient.SqlException: la Nouvelle transaction n'est pas autorisée, car il y a d'autres threads d'exécution dans la session.
lors de l'exécution de ce code:
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;
}
}
}
Modèle #1 - Ce modèle se trouve dans une base de données sur notre Serveur de Dev.
Modèle n ° 2 - Ce modèle se trouve dans une base de données sur notre Serveur de Prod et est mis à jour chaque jour automatique des flux rss.
Remarque - Le rouge cerclé d'éléments dans le Modèle n ° 1 sont les champs que j'utilise pour "la carte" pour le Modèle #2. S'il vous plaît ignorer les cercles rouges dans le Modèle #2: c'est à partir d'une autre question que j'avais et qui est maintenant de répondre.
Note: j'ai encore besoin de mettre dans un isDeleted vérifier afin que je puisse doux supprimer de DB1 si elle a disparu de notre inventaire.
Tout ce que je veux faire, avec ce code, c'est de connecter une société dans DB1 avec un client DB2, obtenir leur liste de produits à partir de DB2 et de l'INSÉRER dans DB1 si elle n'est pas déjà là. Première fois devrait être une pleine tirer de l'inventaire. Chaque fois qu'il est exécuté après rien ne devrait se produire à moins que de nouveaux stocks sont venus dans les aliments au cours de la nuit.
Alors la grande question - comment puis-je résoudre la transaction d'erreur que j'obtiens? Dois-je le supprimer et recréer mon contexte à chaque fois dans les boucles (ne fait pas de sens pour moi)?