Wie kann ich ein Entity Framework-Objekt anfügen, das nicht aus der Datenbank stammt?

.net-3.5 c# entity-framework linq-to-entities

Frage

Ich habe eine vollständige Trennung meiner Entity Framework-Objekte und meiner POCO-Objekte, ich übersetze sie einfach hin und her ...

dh:

// poco
public class Author
{
   public Guid Id { get; set; }
   public string UserName { get; set; }
}

und dann habe ich ein EF-Objekt "Authors" mit den gleichen Eigenschaften.

Also habe ich mein Geschäftsobjekt

var author = new Author { UserName="foo", Id="Guid thats in the db" };

und ich möchte dieses Objekt speichern, also mache ich Folgendes:

var dbAuthor = new dbAuthor { Id=author.Id, UserName=author.UserName };
entities.Attach(dbAuthor);
entities.SaveChanges();

Dies gibt mir jedoch den folgenden Fehler:

Ein Objekt mit einem EntityKey-Wert von Null kann nicht an einen Objektkontext angehängt werden.

EDIT: Es sieht so aus, als müsste ich Entitäten verwenden. AttachTo ("Authors", dbAuthor); ohne EntityKey anzuschließen, aber dann habe ich hartcodierte magische Zeichenfolgen, die brechen, wenn ich meine Entitätssatznamen ändern und keine Kompilierzeitprüfung mehr habe ... Gibt es eine Möglichkeit, die Kompilierzeitprüfung beizubehalten? ?

Ich würde hoffen, dass ich dazu in der Lage wäre, da hartcodierte Strings die Validierung der Kompilierzeit abtöten würden =)

Akzeptierte Antwort

Haben Sie versucht, AttachTo zu verwenden und den Entitätssatz anzugeben?

entities.AttachTo("Authors", dbAuthor);

Dabei wäre "Authors" der tatsächliche Name der Entitätsgruppe.

Bearbeiten:
Ja, es gibt einen besseren Weg (gut sollte es sein). Der Designer sollte "Add" -Methoden zum ObjectContext für Sie generiert haben, die in den obigen Aufruf übersetzt werden.

entities.AddToAuthors(dbAuthor);

was sollte wörtlich sein:

public void AddToAuthors(Authors authors)
{
    base.AddObject("Authors", authors);
}

Definiert in der Datei whateverobjectcontext.designer.cs.


Beliebte Antwort

Das jetzt gerade sehen. Wenn Sie Attach () an ObjectContext anschließen möchten, dh das Entitätsframework überzeugen, dass bereits eine Entität in der Datenbank vorhanden ist, und Sie die Verwendung magischer Zeichenfolgen vermeiden möchten, z

ctx.AttachTo("EntitySet", entity);

Sie können zwei auf Erweiterungsmethoden basierende Möglichkeiten ausprobieren, die das Leben definitiv erträglicher machen.

Mit der ersten Option können Sie schreiben:

ctx.AttachToDefault(entity);

und wird hier behandelt: Tipp 13 - So verbinden Sie eine Entität auf einfache Weise

Mit der zweiten Option können Sie schreiben:

ctx.EntitySet.Attach(entity);

und wird hier behandelt: Tipp 16 - So können Sie das ObjectSet von .NET 4.0 heute nachahmen

Wie Sie sehen können, sind beide sehr einfach zu bedienen und vermeiden Strings ganz.

Hoffe das hilft

Alex



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum