2010-04-06 5 views
1

J'écris une petite application qui traite beaucoup de flux. Je veux utiliser LINQ EF pour cela car la vitesse n'est pas un problème, c'est une application utilisateur unique et, à la fin, ne sera utilisée qu'une fois par mois. Mes questions tournent autour de la meilleure façon de faire des insertions en vrac en utilisant LINQ EF.Insertion groupée et mise à jour avec ADO.NET Entity Framework

Après l'analyse du flux de données entrant, je me retrouve avec une liste de valeurs. Puisque l'utilisateur final peut finir par essayer d'importer des données en double, je voudrais "nettoyer" les données pendant l'insertion plutôt que lire tous les enregistrements, faire une boucle for, rejeter les enregistrements, puis enfin importer le reste.

C'est ce que je fais actuellement:

DateTime minDate = dataTransferObject.Min(c => c.DoorOpen); 
DateTime maxDate = dataTransferObject.Max(c => c.DoorOpen); 

using (LabUseEntities myEntities = new LabUseEntities()) 
{ 
    var recCheck = myEntities.ImportDoorAccess.Where(a => a.DoorOpen >= minDate && a.DoorOpen <= maxDate).ToList(); 
    if (recCheck.Count > 0) 
    { 
     foreach (ImportDoorAccess ida in recCheck) 
     { 
      DoorAudit da = dataTransferObject.Where(a => a.DoorOpen == ida.DoorOpen && a.CardNumber == ida.CardNumber).First(); 
      if (da != null) 
       da.DoInsert = false; 
     } 
    } 

    ImportDoorAccess newIDA; 
    foreach (DoorAudit newDoorAudit in dataTransferObject) 
    { 
     if (newDoorAudit.DoInsert) 
     { 
      newIDA = new ImportDoorAccess 
      { 
       CardNumber = newDoorAudit.CardNumber, 
       Door = newDoorAudit.Door, 
       DoorOpen = newDoorAudit.DoorOpen, 
       Imported = newDoorAudit.Imported, 
       RawData = newDoorAudit.RawData, 
       UserName = newDoorAudit.UserName 
      }; 
      myEntities.AddToImportDoorAccess(newIDA); 
     } 
    } 
    myEntities.SaveChanges(); 
} 

Je suis aussi obtenir cette erreur:

System.Data.UpdateException was unhandled
Message="Unable to update the EntitySet 'ImportDoorAccess' because it has a DefiningQuery and no element exists in the element to support the current operation."
Source="System.Data.SqlServerCe.Entity"

Qu'est-ce que je fais mal?

Les pointeurs sont les bienvenus.

Répondre

2

Vous pouvez effectuer plusieurs insertions de cette manière.

J'ai vu l'exception que vous obtenez dans les cas où le modèle (EDMX) n'est pas configuré correctement. Vous n'avez pas de clé primaire (EntityKey dans les termes EF) sur cette table, ou le concepteur a essayé de deviner ce que l'EntityKey devrait être. Dans le dernier cas, vous verrez deux ou plusieurs propriétés dans le concepteur EDM avec des clés à côté d'eux.

Assurez-vous que la table ImportDoorAccess possède une seule clé primaire et actualise le modèle.

+0

Fonctionne comme un champion! Comme ce sont des tables d'importation, je n'ai pas mis de PK sur eux. Maintenant que j'ai, et rafraîchi mon modèle, plus d'erreur! Merci. –

Questions connexes