2009-03-31 14 views
2

Ich habe bereits existiert 2 Tische:Wie kann ich ein Objekt mit dem Entity Framework hinzufügen, wenn es einen Fremdschlüssel Objekt, das

tblAuthors 
- id 
- username 

tblPosts 
- id 
- authorid 

Also, wenn ich einen neuen Beitrag

var post = new Post { Id=Guid.NewId(), Author=new Author { UserName="username", Id="id in database } }; 

Das schaffen Autor des Post ist bereits in der Datenbank, aber die Post selbst ist nicht ...

So was ich tun möchte:

entities.AddToPosts(obj); 

aber es versucht, den Autor und den Beitrag zu hinzufügen ... ist es eine Möglichkeit, den Autor zu Speichern haben und den Beitrag hinzufügen? Oder ignoriere den Autor komplett?

Ich habe sowohl den Post als auch den Autor als meine eigenen POCO Geschäftsobjekte, die aus der Datenbank gezogen und dann in meine Business-Schicht konvertiert wurden. Ich möchte sie nicht erneut abrufen müssen, da ich in meiner Business-Ebene geändert haben könnte. Also möchte ich nur die Objekte anhängen.

Ich möchte die Datenobjekte nicht behalten, ich ziehe sie heraus und wandle sie in Geschäftsobjekte um und berühre sie dann erst wieder, wenn ich zurück in die Datenbank pushen möchte und die Geschäftsobjekte zu konvertieren Datenobjekte.

Antwort

0

Diese Funktionalität wird nicht vollständig in EF unterstützt noch hatte ich auf die folgenden:

var post = new Post { Id=Guid.NewId(), AuthorReference.EntityKey = new EntityKey("Authors", "Id", authorIdValue) }; 
entities.AddToPost(post); 
+0

ist diese aktuelle für Entity Framework 4? (gleicher Weg?) – David

0

Sollten Sie den Autorendatensatz nicht zuerst aus der Datenbank abrufen, um ihn im Post-Objekt festlegen zu können?

So würden Sie erhalten Sie:

var author = Author.Select(a => a.Id).FirstOrDefault(); 
var post = new Post { Id=Guid.NewId(), Author=author }; 
entities.AddToPosts(obj); 

Vielleicht könnten Sie die Attach und AttachTo Object, um das Objekt zu befestigen, ist aber nicht in der MSDN-Bibliothek erwähnt, ob eine Abfrage an die Datenbank ausgeführt wird. Mit einer Ablaufverfolgung können Sie überprüfen, ob eine Datenbankabfrage auftritt.

+0

sowohl ich die Post und den Autor als mein eigenes POCO-Business-Objekte haben, die aus der Datenbank gezogen wurden und dann in meine Business-Ebene konvertiert. Ich möchte sie nicht erneut abrufen müssen, da ich in meiner Business-Ebene geändert haben könnte. Also möchte ich nur die Objekte anhängen. – sontek

0

Es ist möglich, eine "bekannte" Entität zu verspotten, ohne die Datenbank zu treffen. Erstellen Sie ein neues Entitätsobjekt, legen Sie die Eigenschaften der Entität fest, die im Entitätsschlüssel verwendet werden, und rufen Sie ObjectContext.AttachTo auf. Dadurch wird die Entität im Status Unverändert zum Kontext hinzugefügt und kann jetzt von anderen Entitäten referenziert werden.

+0

Dies funktioniert bei einem Update für ein einzelnes Objekt, nicht jedoch für Fremdschlüsselelemente. – sontek

0

Ich habe eine Ahnung, dass Funktionalität, die Sie suchen, für die nächste Version von EF angekündigt wurde. Es gab ein ganzes Thema im Zusammenhang mit Entity Associacions @ Mix.

Oder Sie können versuchen, die AuthorId-Spalte von db zu Entity zuzuordnen. (Es abbildet standardmäßig nicht) Sie können Fremdschlüssel nicht zuordnen, so dass Sie nicht ein Objekt zuordnen können, ohne eine von db zu bekommen.

EDIT: und deshalb verwende ich immer noch linq2sql, die diese Funktionalität bietet.

Verwandte Themen