2009-10-12 16 views
1

Je reçois l'erreur suivante "séquence contient plusieurs éléments" lorsque vous tentez de remplir mon objet de table de promotion. Je sais que je reçois cette erreur car ma requête renvoie plusieurs valeurs comme il se doit. Quelqu'un peut-il me diriger dans la bonne direction quant à la façon de supprimer plusieurs enregistrements en plus de la boucle (si possible avec EF).séquence contient plus d'un élément

principal proc:

TBLPROMOTIONCOLLECTION promotionCollectionInfo = null; 
using (webStoreEntities webStoreContext = new webStoreEntities()) 
{ 
    promotionCollectionInfo = WebStoreDelegates.selectPromotionCollection.Invoke (webStoreContext).ByPromoID(promotionId).ToList().SingleOrDefault(); 

    if (promotionCollectionInfo != null) 
    { 
    webStoreContext.DeleteObject(promotionCollectionInfo); 
    webStoreContext.SaveChanges(); 
    } 
} 

Délégué selectPromotionCollection:

 public static Func<webStoreEntities, IQueryable<TBLPROMOTIONCOLLECTION>> selectPromotionCollection = 
    CompiledQuery.Compile<webStoreEntities, IQueryable<TBLPROMOTIONCOLLECTION>>(
     (promotion) => from c in promotion.TBLPROMOTIONCOLLECTION 
         select c); 

filtre ByPromoID:

 public static IQueryable<TBLPROMOTIONCOLLECTION> ByPromoID(this IQueryable<TBLPROMOTIONCOLLECTION> qry, int promotionID) 
    { 
     //Return the filtered IQueryable object 
     return from c in qry 
       where c.PROMOTION_ID == promotionID 
       select c; 
    } 

FirstOrDefault ne résout pas mon problème depuis que je suis dans l'attente des multiples. Toute aide serait appréciée.

Merci, Billy

+0

Pouvez-vous s'il vous plaît affiner votre question. Essentiellement, demandez-vous pourquoi vous avez eu l'erreur "séquence contient plus d'un élément" ou demandez-vous comment supprimer plusieurs objets à la fois dans EF? - PS si vous demandez comment supprimer en bloc des éléments dans EF sans boucler Je pense que la réponse est que vous ne pouvez pas. ObjectContext a seulement une méthode DeleteObject (entité d'objet) et n'a pas un DeleteAllObjects ou une méthode similaire. –

+0

Demander comment contourner l'erreur que j'ai eue parce que j'ai besoin de supprimer des multiples. Devinez vous avez répondu à ma question. Probablement juste aller la route SP. Merci. –

Répondre

1

Le bug est ici:

.SingleOrDefault();

(3ème ligne de votre procédure principale) Ceci se déclenche lorsque l'IQueryable renvoie> 1 élément, ce que fait votre ByPromoId.

Une solution serait de changer votre code:

promotionCollectionInfo = WebStoreDelegates.selectPromotionCollection 
    .Invoke(webStoreContext).ByPromoID(promotionId).ToList(); 

foreach (var pc in promotionCollectionInfo) 
{ 
    webStoreContext.DeleteObject(pc); 
} 
webStoreContext.SaveChanges(); 
+0

Sorte de ce que je voulais éviter. Cette boucle peut être plutôt longue, donc la suppression de 100 à 200 enregistrements 1 à la fois semble plutôt épuisante par rapport à une seule suppression de tous ces enregistrements. Juste allé de l'avant et mappé un sp sur mappages de cud de ma table d'entité et formé ma suppression sp pour se débarrasser des multiples que je voulais. Merci pour votre réponse rapide. –

+0

Vous avez dit que vous vouliez contourner l'erreur. Je t'ai eu autour de l'erreur. Si vous avez une question entièrement différente, pourriez-vous le demander directement? –

Questions connexes