2012-03-29 13 views
0

Ich habe 2 Entitäten Dokumente (ID, Nummer, Inhalt, Date_Added) und Adocuments (Dokumente) (Ida, Number, Content, Date_Added) und ich möchte verschieben die Dokumente (Zum Beispiel) von März in meiner Archiveinheit. Meine Tabellen haben dieselben Felder.Verschieben von Daten von einer Entität zu einer anderen Entität

Wählen Teil

WPF_TestEntities WPFModel; 
DateTime init_per = new DateTime(2012, 03, 01); 
DateTime fina_per = new DateTime(2012, 03, 31); 
var qry = from d in WPFModel.Document // qry - documents form march 
      where d.Date_Added >= init_per && d.Date_Added <= fina_per 
      select d; 

Insert Teil

//WPFModel.Adocument.Insert/Add(qry); 

Danach kann ich die Marsch Dokumente aus dem Dokument Einheit löschen.

Wie kann ich die Daten (Qry) von Dokumenten zu Adocuments verschieben? (Wird es irgendwelche Probleme mit der Einzigartigkeit meiner ID geben?)

+0

Leider ist es nicht wirklich klar, was Ihre Frage ist. – oleksii

+0

Ich denke, dass es 3 Stufen gibt (die Auswahl, die Einfügung und das Löschen) – Misi

+0

Ich denke, das hängt vom Design der aktuellen Anwendung ab. Wenn Sie die Archiv-Tabelle ausschließlich als "Backup-Speicherort" verwenden, ohne irgendwelche Spiegelungen zu haben, dann sollten Sie keine Probleme mit den IDs bei Select-Insert-Delete haben. Versuchen Sie, dies auf einem Papier zu zeichnen, was passiert wann. Sobald Sie ein klares Bild haben, führen Sie einige Integrationstests durch, die glückliche Pfade abdecken (Select-Insert-Delete), später können Sie Eckfälle überprüfen (z. B. wenn der entfernte Eintrag aktualisiert wird). Sie müssen dies möglicherweise auch in Stapeltransaktionen einbetten (sagen Sie, dass Sie dies in kleinen Stücken von N Dokumenten tun). – oleksii

Antwort

1

Sie können dies versuchen:

WPF_TestEntities WPFModel; 
DateTime init_per = new DateTime(2012, 03, 01); 
DateTime fina_per = new DateTime(2012, 03, 31); 
var qry = from d in WPFModel.Document // qry - documents form march 
     where d.Date_Added >= init_per && d.Date_Added <= fina_per 
     select d; 

foreach (Document doc in qryluna) 
    { 
     Adocument newadoc = new Adocument(); 
     newadoc.IdA = doc.Id; 
     newadoc.Nr_intern = doc.Nr_intern; 
     newadoc.Obiect = doc.Obiect; 
     newadoc.Data_Added = doc.Data_Added ; 
     WPFModel.Adocument.AddObject(newadoc); 
     WPFModel.Document.DeleteObject(doc); 
    } 
    WPFModel.SaveChanges(); 
+0

Ich habe SaveChanges außerhalb der Foreach verschoben – Misi

0

Sie können versuchen, das Element Ergebnis von Abfrage downcasting, wenn es nicht ausgeführt wird, sollten Sie jedes Element nehmen und in ein neues Objekt kopieren, als Sie speichern können es in der Übersichtstabelle. Die ID könnte ein Problem sein, denn wenn Sie die ID als Autoincrement (Identität auf SQL-Server) festgelegt haben, wird die Datenbank versuchen, eine neue ID zu veröffentlichen, stattdessen Ihre alte. Die sicherste Aufgabe, die Sie tun sollten, besteht darin, die erste Entität abzufragen, die einzelnen Werte zu übernehmen und eine neue historische Entität zu füllen (die mit der Übersichtstabelle verknüpft ist) und sie zu speichern. Ich denke, dass Sie die zweite Tabelle (Adocuments) mit diesen Bereichen haben könnte:

  • id (Tisch Identität id)
  • ida (Ihre ID aus Dokumenten Tabelle kopiert, um wirklich die Geschichte aufrechtzuerhalten)
  • Anzahl
  • Inhalt
  • DATE_ADDED

ich hoffe, dass dies für Sie nützlich ist :)

Verwandte Themen