Voici mon modèle composé de 3 entités : Route, Location et LocationInRoute.
la méthode suivante échoue et obtient une exception lors de sa validation :
public static Route InsertRouteIfNotExists(Guid companyId, IListLocation> locations)
{
//Loop on locations and insert it without commit
InsertLocations(companyId, routesOrLocations);
RouteRepository routeRep = new RouteRepository();
Route route = routeRep.FindRoute(companyId, locations);
if (route == null)
{
route = new Route()
{
CompanyId = companyId,
IsDeleted = false
};
routeRep.Insert(route);
LocationInRouteRepository locInRouteRep = new LocationInRouteRepository();
for (int i = 0; i < locations.Count; i++)
{
locInRouteRep.Insert(new LocationInRoute()
{
//Id = i,
LocationId = locations[i].Id,
Order = i,
RouteId = route.Id
});
}
}
return route;
}
Quand on le fait :
InsertRouteIfNotExists(companyId, locations);
UnitOfWork.Commit();
J'ai eu :
Impossible de déterminer l'extrémité principale de la relation 'SimTaskModel.FK_T_STF_SUB_LOCATION_IN_ROUTE_T_STF_LOCATION_location_id'. Plusieurs entités ajoutées peuvent avoir la même clé primaire.
En divisant le commit et en l'insérant dans le methos - ça marche :
public static Route InsertRouteIfNotExists(Guid companyId, IListLocation> locations)
{
//Loop on locations and insert it without commit
InsertLocations(companyId, routesOrLocations);
UnitOfWork.Commit();
RouteRepository routeRep = new RouteRepository();
Route route = routeRep.FindRoute(companyId, locations);
if (route == null)
{
route = new Route()
{
CompanyId = companyId,
IsDeleted = false
};
routeRep.Insert(route);
LocationInRouteRepository locInRouteRep = new LocationInRouteRepository();
for (int i = 0; i < locations.Count; i++)
{
locInRouteRep.Insert(new LocationInRoute()
{
//Id = i,
LocationId = locations[i].Id,
Order = i,
RouteId = route.Id
});
}
UnitOfWork.Commit();
}
return route;
}
Je voudrais appeler commit une fois et en dehors de la méthode. Pourquoi cela échoue-t-il dans le premier exemple et que signifie cette exception ?
9 votes
@Ladislav Mrnka : Je n'ai pas de patron et c'est mon projet. Je ne sais vraiment pas d'où vous vient l'impression que je demande immédiatement sur SO. Vous n'êtes pas le seul à utiliser l'ordinateur toute la journée. Une consultation gratuite ? Quelqu'un donne-t-il une garantie pour ses réponses ? Je crois que c'est un forum où l'on peut poser des questions et c'est ce que je fais. J'ai beaucoup de questions et je crois que je fais un long chemin d'apprentissage grâce à ce forum et à des gens comme vous. La participation est un choix.
1 votes
@Ladislav : Je ne vois qu'une question raisonnablement bien posée, et le profil de l'OP n'indique rien d'excessif non plus.
0 votes
Utilisez-vous le même ObjectContext dans tout le périmètre d'opération ou chaque nouveau dépôt aura son propre ObjectContext ?
0 votes
@Akash Kava : J'utilise le même ObjectContext.