Ich übertrage Daten zwischen dem Entitätsframework und der Business-Schicht und der Benutzerschicht mithilfe von Datenübertragungsobjekten. Ich habe einige Zweifel, wenn ich ein Objekt, das in ein DTO konvertiert wird, abrufen, wie aktualisiere ich das richtige Objekt im Entity-Framework und nicht nur ein Duplikat einfügen?Aktualisieren von Entitäts-Framework-Objekten
24
A
Antwort
2
Sie müssten einen primären oder alternativen Schlüssel in das DTO aufnehmen und diesen Schlüssel bei der Aktualisierung wieder mit der korrekten EF-Entität abgleichen.
7
eine alte Frage, aber nur für den Fall, dass jemand braucht eine Code-Lösung:
Beispiel:
public void EditArticle(
Article article, string articleTypeId, string[] categoryId)
{
var id = 0;
Article art = de.ArticleSet
.Include("ArticleTypes")
.Include("Categories")
.Where(a => a.ArticleID == article.ArticleID)
.First();
var count = art.Categories.Count;
for (var i = 0; i < count; i++)
{
art.Categories.Remove(art.Categories.ElementAt(i));
count--;
}
foreach (var c in categoryId)
{
id = int.Parse(c);
Category category = de.CategorySet
.Where(ct => ct.CategoryID == id).First();
art.Categories.Add(category);
}
art.Headline = article.Headline;
art.Abstract = article.Abstract;
art.Maintext = article.Maintext;
art.DateAmended = DateTime.Now;
art.ArticleTypesReference.EntityKey = new EntityKey(
"DotnettingEntities.ArticleTypeSet",
"ArticleTypeID",
int.Parse(articleTypeId)
);
de.SaveChanges();
}
28
Der folgende Code wird eine EF 4 Entität aktualisieren, die wie geschaffen wurden Ein Controller-Parameter in MVC aus einer stark typisierten Ansicht:
Es scheint der Trick besteht darin, den ObjectStateManager zu verwenden, um den Status f zu ändern rom Hinzugefügt zu Geändert, sobald die Entität zum Kontext hinzugefügt wurde.
MyEntities db = new MyEntities();
db.Product.AddObject(product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
return db.SaveChanges() > 0;
Per @Sean Mills Kommentar, wenn Sie EF5 Gebrauch verwenden:
((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Added);
4
//I am replacing player :)
public ActionResult ProductEdit(string Id, Product product)
{
int IdInt = DecyrptParameter(Id);
MyEntities db = new MyEntities();
var productToDetach = db.Products.FirstOrDefault(p=> p.Id == IdInt);
if (product == null)
throw new Exception("Product already deleted"); //I check if exists, maybe additional check if authorised to edit
db.Detach(productToDetach);
db.AttachTo("Products", product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
db.SaveChanges();
ViewData["Result"] = 1; // successful result
return View();
}
2
Dies sollte 5 für EF arbeiten: https://stackoverflow.com/a/11749716/540802:
db.Entry(product).State = EntityState.Modified;
Verwandte Themen
- 1. Aufrufe von app nicht aktualisieren/aktualisieren
- 2. Aktualisieren von GAC dlls
- 3. Aktualisieren Seite von Ajax
- 4. Elternfragment von Kindfragment aktualisieren
- 5. Aktualisieren von MySQL Ansichten?
- 6. Aktualisieren von Bereitstellungen SCCM
- 7. Aktualisieren von D3-Achsenbeschriftungen
- 8. aktualisieren withing von MVVM
- 9. Subviews von Ember.View aktualisieren
- 10. Aktualisieren ThemeResources von C#?
- 11. Aktualisieren von benutzerbasierte Konfigurationsdatei
- 12. Aktualisieren von JTabbedPane-Komponenten
- 13. Aktualisieren
- 14. Aktualisieren Sie Jfreechart, wenn Sie Daten von der Webcam aktualisieren
- 15. Wie Aktualisieren/Aktualisieren DOM-Element nach dem Einfügen von jQuery
- 16. Aktualisieren der endgültigen Liste vor dem Aktualisieren von ArrayAdapter/listView
- 17. Programmgesteuert aktualisieren/aktualisieren HttpContext.User
- 18. Aktualisieren/Neu Laden von Desktop
- 19. Assertionsfehler beim Aktualisieren von tableView
- 20. Aktualisieren von Dokumenten in RavenDB
- 21. BuffDays von TMonthCalendar manuell aktualisieren?
- 22. Aktualisieren von Pufferobjekten ohne Speicherleck
- 23. Aktualisieren von Elementen in ListBox
- 24. SQL Aktualisieren von zwei Datensätzen
- 25. iOS Aktualisieren von Firebase Auth
- 26. Aktualisieren von verschachtelten Objekten Feuerbasis
- 27. SQLite-Datei von Datentabelle aktualisieren
- 28. alle Pakete von GitHub Aktualisieren
- 29. ASP.NET MVC - Aktualisieren von Fremdschlüsseln
- 30. Aktualisieren von Zählern durch Hibernate
Endlich! Ich habe so viel Zeit mit anderen Workarounds verschwendet - das funktioniert großartig, ohne dass dbObject.Property = passedObject.Property für jede Eigenschaft beim Update ausgeführt werden muss. – kape123
Wenn der ObjectStateManager keine Eigenschaft Ihres Kontexts ist try ((System.Data.Entity.Infrastructure.IObjectContextAdapter) db) .ObjectContext http://StackOverflow.com/a/8968643/678338 –