Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Linq-> Daten innerhalb der DB kopieren


Christoph1972 - So 09.02.14 11:55
Titel: Linq-> Daten innerhalb der DB kopieren
Hallo Leute,

ich möchte mit Linq Daten innerhalb einer Datenbank in eine Archiv-Tabelle kopieren.



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
private void InsertResultValues(List<string> ids)
{
    using (SequencerEntities sequencerContext = new SequencerEntities(EntityConnectionString()))
    {
        foreach (string id in ids)
        {
            var t = from results in sequencerContext.ResultValues
                    where results.C_ID == id
                    select results;

            if (t.FirstOrDefault() != null)
            {
                foreach (var res in t)
                {
                    ResultValuesArchiv newVal = new ResultValuesArchiv()
                    {
                        C_ID = res.C_ID,
                        Element = res.Element,
                        Value = res.Value,
                        Unit = res.Unit
                    };
                    sequencerContext.ResultValuesArchiv.AddObject(newVal);
                    sequencerContext.SaveChanges();
                }
            }
        }
    }
}


Fehlermeldung: "Diesem Command ist bereits ein geöffneter DataReader zugeordnet, der zuerst geschlossen werden muss."

Hm, was bedeutet das im Detail? Verstehe ich nicht wirklich??

Könnte mir bitte jemand erklären was das bedeutet? Was mache ich hier falsch??


Christoph1972 - So 09.02.14 12:04

Erledigt, SaveChanges() gehört hinter die Iteration.


Christian S. - So 09.02.14 12:07

Hm, merkwürdig. Wenn es dieselbe Tabelle wäre, könnte ich das nachvollziehen, aber so ...

Hast Du mal versucht, fürs Schreiben einen separaten Kontext zu erstellen?

btw, ist es nicht sinnvoller, SaveChanges außerhalb der Schleife aufzurufen?



//edit: Mist, warum wurde ich nicht informiert, das hier eine Antwort kam? :gruebel:


Christoph1972 - So 09.02.14 14:32

Also, irgendwie ist hier etwas merkwürdig. Jetzt bekomme ich eine UpdateExeption:

Die INSERT-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschränkung 'FK_ResultValuesArchiv_ResultsArchiv'. Der Konflikt trat in der Sequencer-Datenbank, Tabelle 'dbo.ResultsArchiv', column 'C_ID' auf.

Scheinbar hat der Server ein Problem damit, das die PKs auf beiden Tabellen identisch sind. Hm, da muss ich heute Abend noch mal schauen was da los ist.....