| 

.NET C# Java Javascript Exception

3
Hallo

Ich dürfte in einem Projekt endlich mal EF einsetzten. :-)
Jetzt habe ich mir ein paar Tests gebaut um zu prüfen wie sich das Teil verhält mit Daten die ich dann nutzen möchte. Allerdings bin ich nicht wirklich zufrieden.

Zu erwähnen ist das ich STE (Self-Tracking Entities) nutze die über WCF mit dem Client ausgetauscht werden.

Das Laden mit allen Unterobjekten scheint kein Problem zu sein.
using (ProjectContainer db = new ProjectContainer(connectString))
{
Project projekt = db.Project
.Include("Produkt")
.Include("Periode")
.Include("Phase")
.Include("Abteilung")
.Include("Chance")
.Where(t => t.ProjektID == projectId).FirstOrDefault();

return projekt;
}


Aber das Speichern gefällt mir noch nicht. Irgend wie habe ich feststellen müssen das ein neu erstelltes Objekt anders gespeichert werden muss als eines das geladen wurde. Stimmt das? Bei mir dieht das Speichern so aus.
if (projekt.ProjektID == Guid.Empty)
{
//Neues Objekt
using (ProjectContainer db = new ProjectContainer(connectString))
{
db.Project.AddObject(projekt);
db.SaveChanges();
}
}
else
{
//Bestehendes Objekt (geladen, verändert, speichern)
using (ProjectContainer db = new ProjectContainer(connectString))
{
db.Project.ApplyChanges(projekt);

db.SaveChanges();
}
}

Ist dem wirklich so?
16.02.2012
GENiALi 2,5k 1 2 8
1 Antwort
3
Zwischen db.SaveChanges(); und db.SaveChanges(); ist ja jetzt nicht so ein großer Unterschied zu erkennen ;)

D.h. den Teil kann man ja am Ende zum Speichern auch einmalig ausführen. Insofern wird nicht anders gespeichert, sondern nur vorher anders mit den Objekten umgegangen.

Alles andere ist Code zum Hinzufügen oder Änderungen durchführen. Da brauchst du ja sowieso unterschiedlichen Code.

Es gibt im Context eine ObjectStateManager Property mit GetObjectStateEntry-Methode liefert eine EntityState Enumeration. Mit der kann man den Status eines Objekts feststellen, so dass du auch nicht auf die Abfrage einer Guid zwingend angewiesen bist.

Gruß
17.02.2012
Magier77 238 1 6
OK. Das SaveChanges ist redundant. Aber muss man zwischen AddObject und ApplyChanges unterscheiden?
GENiALi 17.02.2012
2
Ja. Denn AddObject und ApplyChanges sind verschiedene Methoden.

Schau Dir mal dieses Beispielszenario an: http://msdn.microsoft.com/de-de/library/ee789839.aspx
M.E. kannst Du .ADD oder .AddObject im Falle eines neuen (detachten) Objekts ausführen und den Rest, also ApplyChanges() und SaveChanges() grundsätzlich immer wenn du speichern möchtest. Dies ist in diesem Beispiel ebenfalls so gelöst.
Magier77 17.02.2012

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH