Ich habe eine vollständige Trennung von meiner Entity Framework Objekte und meine POCO Objekte, ich sie gerade übersetzen hin und her ...Wie kann ich ein Entity Framework-Objekt anfügen, das nicht aus der Datenbank stammt?
dh:
// poco
public class Author
{
public Guid Id { get; set; }
public string UserName { get; set; }
}
und dann habe ich ein EF-Objekt „Autoren“ mit den gleichen Eigenschaften ..
so habe ich mein Business-Objekt
var author = new Author { UserName="foo", Id="Guid thats in the db" };
und ich möchte dieses Objekt speichern, damit ich den follo tun Flügel:
var dbAuthor = new dbAuthor { Id=author.Id, UserName=author.UserName };
entities.Attach(dbAuthor);
entities.SaveChanges();
aber das gibt mir die folgende Fehlermeldung:
An object with a null EntityKey value cannot be attached to an object context.
EDIT: Es ist wie ich ("Autoren", dbAuthor) verwenden müssen entities.AttachTo aussieht; ohne EntityKey anzuhängen, aber dann habe ich fest codierte magische Zeichenfolgen, die brechen werden, wenn ich meine Entity-Set-Namen überhaupt ändere und keine Compile-Time-Überprüfung habe ... Gibt es einen Weg, den ich anhängen kann, der die Kompilierzeit überprüft ?
Ich hoffe, würde ich in der Lage sein würde, dies zu tun, als hart codierte Strings Kompilierung Validierung töten würde saugen =)
Hast du dir das Edit meiner Antwort angesehen, es wird y erlauben ou, um es ohne magische Zeichenfolgen oder AttachTo zu tun, da die Methoden vom edmx-Modell vom Designer erzeugt werden und beibehalten werden. –
Ja, ich füge es nicht hinzu, ich aktualisiere es, daher muss ich es anhängen und Änderungen speichern – sontek
Ich glaube immer noch, dass Ihr Modell ein Problem mit der Id-Eigenschaft des Autorenobjekts hat, das nicht als EntityKey festgelegt ist verdoppeln, sollten Sie die XML überprüfen generiert und stellen Sie sicher, dass es in einem Schlüsselelement verschachtelt ist und sicherstellen, dass die Id-Eigenschaft das Attribut EdmScalarPropertyAttribute (EntityKeyProperty = true) –