none
Entity Framework - Klonen von Entities RRS feed

  • Frage

  • Hallo zusammen,

    mein Problem lautet wie folgt: Ich möchte ein Entity Objekt kopieren mitsamt allen Verknüpfungen zu anderen Objekten. Dabei bin ich nach folgenden Beispiel vorgegangen: http://naspinski.net/post/Cloning-an-Entity-in-Linq-to-Entities.aspx

    Aber auch wenn ich das EntityKey Propertie auf nothing setzte bekomme ich die Fehlermeldung, dass bereits ein Objekt mit demselben Schlüssel im ObjektStateManager vorhanden ist.

    Ich bin froh über jede Hilfe und auch vorschläge, wie man das Problem auf andere Weise lösen kann.

    Danke und Grüße, f.heck

    Montag, 31. Mai 2010 09:00

Antworten

Alle Antworten

  • Hallo F.,

    schau Dir mal an:  Deep cloning entity objects ,
    ein anderer Ansatz (EF 1.0, etwas heftig viel Emit):
    http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx

    Gruß Elmar

    • Als Antwort markiert f.heck Dienstag, 1. Juni 2010 06:23
    Montag, 31. Mai 2010 09:46
    Beantworter
  • Hallo Elmar,

    danke für deine Antwort. Leider sind mir die Beispiel zu komplex, da ich anscheinend noch nicht tief genug im Thema bin. Da ich im Moment auch nicht die Zeit habe mich tiefer damit zu beschäftigen muss ich mir wohl einen anderen Ansatz zur Lösung meines Problems suchen. Hättest du noch Ideen für eine einfachere und schnellere Lösung?

    Grüße, f.heck

    Montag, 31. Mai 2010 10:37
  • Hallo F.,

    die "einfachere" Lösung wäre die Enities Stück für Stück via Code zu erzeugen.
    Ob das dann schneller ist, hängt dabei von der tiefe der zu übertragenen Strukturen ab.
    Die Grundlagen solltest Du Dir aber schon zu Gemüte führen, wie
    Anfügen und Trennen von Objekten (Entity Framework)

    denn je mehr man darüber weiß, um so "schneller" und effizienter kann
    eine Indivual-Lösung ausfallen. Gerade beim EF (und anderen ORM) gilt:
    Wenn sie an der Oberfläche auch sehr einfach in der Verwendung aussehen,
    steckt da einige Komplexität hinter, die beherrscht sein will.
    (Anders gesagt: So einfach beim Autofahren ist es nicht,
    wo man über den Motor nicht allzuviel wissen muß).

    Gruß Elmar

    Montag, 31. Mai 2010 11:44
    Beantworter
  • Hallo Elmar,

    danke für den Link. Du hast wohl recht, ich werde nicht drumherum kommen mir die ganze Sache genauer anzuschauen. Aber ich möchte nochmal auf den ersten Link von deinem ersten Post zurück kommen.

    Ich habe es soweit übernommen und nach VB konvertiert. Nur eine Sache, an der hängt es noch. Ich habe keine Ahnung wie ich diesen c# Code konvertiert bekomme:

     //Create a generic instance of the entities collection object
    
    var t = typeof(EntityCollection<>).MakeGenericType( new[] {property.PropertyType.GetGenericArguments()[0] });

    Wie gesagt, der Rest funktioniert. Wenn ich diesen Teil auskommentiere, klappt auch das Klonen des Entities. Aber leider werden die darunterhängenden halt nicht übernommen.

    Kannst du mir bei diesem Problem nochmal weiterhelfen?

    Danke und Grüße,

    f.heck

    Montag, 31. Mai 2010 15:13
  • Hallo F.,

    das wäre dann (ungetestet) mit Option Infer On:

        Dim t = GetType(EntityCollection(Of )).MakeGenericType( _
            New Type() {[property].PropertyType.GetGenericArguments()(0)})
    
    Gruß Elmar

    • Als Antwort markiert f.heck Dienstag, 1. Juni 2010 06:23
    Montag, 31. Mai 2010 15:55
    Beantworter
  • Guten Morgen Elmar,

    danke für deine Hilfe, ich bin einen wesentlichen Schritt weiter gekommen. Die Klasse läuft jetzt schonmal durch. Sie wirft zwar noch Exceptions, aber die Richtung stimmt auf jedenfall.

    Nochmal danke und Grüße,

    f.heck

    Dienstag, 1. Juni 2010 06:22