Hallo,
Entity Framework macht mal wieder Probleme.
Wenn ich z.B. eine CSV Datei einlese mit Zwei Spalten, in der einen Steht der Schülername, in der anderen der Name der Klasse, in der er ist,
dann möchte ich beim Durchgehen der CSV den Schüler einer Klasse zuordnen, wenn es die Klasse noch nicht gibt, soll sie angelegt werden.
Das Model sähe dann so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public class Schueler { public int Id { get; set; }
public string Name { get; set; }
public Klasse Klasse { get; set; } }
public class Klasse { public int Id { get; set; }
public string Name { get; set; }
public ICollection<Schueler> Schueler { get; set; } } |
Jetzt lese ich die CSV Zeile für Zeile durch und erzeuge aus den Zeilen ein Schülerobjekt.
Dabei prüfe ich, ob für den Schüler schon eine Klasse gibt, wenn ja weise zu, wenn nein, lege an und weise zu.
Eine Zeile sieht z.B. so aus: Peter Muster;10b, die wird in ein StringArray umgewandelt.
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:
| public void Lesen() { foreach (var zeile in csv) { var schueler = new Schueler() { Name = zeile[0], };
if (cxt.Klasse.Any(x => x.Name == zeile[1])) { schueler.Klasse = cxt.Klasse.Where(x => x.Name == zeile[1]) } else { schueler.Klasse = new Klasse() { Name = zeile[1] }; }
cxt.Schueler.Add(schueler); } } |
Leider legt er jetzt für jeden Schüler grundsätzlich eine neue Klasse an, obwohl die Klasse schon vorhanden ist(oder sein sollte?). Warum?
Was mache ich falsch?
(Natürlich geht es nicht um Schüler und Lehrer, ich kann mit einfachen Beispielen mein Problem einfach besser auf den Punkt bringen)
LG Schafschaf