J'ai du code MVC qui sertialise un objet EF 3.5 dans un type anonyme de retour en tant que Résultat JSON à un appel AJAX sur ma page. L'obstacle que j'ai est que lorsque j'envoie l'objet de retour au serveur via JSON (et que je laisse le modelbinder le désériorialiser pour moi dans mon type d'EF), je dois le mettre à jour dans mon contexte de cadre d'entité Voici ce que j'ai: strong> p>
6 Réponses :
Il n'y a aucun moyen de contourner le problème de la clé de l'entité. Soit vous devez l'ajouter à votre type anonyme ou je vous recommanderais de porter votre code pour utiliser des services de données. p>
http://www.haselman.com/blog/jquerytoshipwithastmvcandVisualStudio.aspx p>
qui vous permettrait de faire toute la manipulation de la DB du côté du client. P>
Avez-vous essayé quelque chose comme:
object original; var key = contexte..CreateEntityKey("EntitySet", modified); if(contexte.TryGetObjectByKey(key, out original)) { var originalEntity = (YourEntityType)original; // You have to mannualy set your entityKey originalEntity.YourEntityReference.EntityKey = new EntityKey("Entities.EntitySet", "Id", modified.YourEntity.Id); contexte.ApplyPropertyChanges("EntitySet", modified); } contexte.SaveChanges();
ou vous pouvez utiliser MOWORAPPER pour mapper ces champs pour vous, vous devez donc ajouter une ligne supplémentaire à votre exemple. P>
2 lignes réellement - récupérez la clé, puis sur la carte.
Pourquoi pas simplement utiliser les méthodes de contrôleur UpdateModel ou TryupDaTemodel à la place? Cela fonctionne très bien avec EF et vous pouvez même définir explicitement la liste de propriétés incluse.
Le paramètre ID sera automatiquement via la structure MVC au champ masqué de votre formulaire spécifiant l'ID. P>
public void Update(int id, FormCollection collection) { using (var db = new BandSitesMasterEntities()) { var albumToUpdate = db.Album.First(x => x.ID == id); //use UpdateModel to update object, or even TryUpdateModel UpdateModel(albumToUpdate, new string[] { "AlbumTitle", "Description", "ReleaseYear", "ImageURL", "OtherURL" }); db.SaveChanges(); } }
Cela est devenu beaucoup plus facile pour nous à EF 4.0. C'est ce que nous avons fait dans ef 3.5: et ensuite: p> Il devient plus compliqué si vous avez des contraintes de clé étrangère, mais On dirait que tu ne le fais pas. p> p>
Dans la classe partielle de votre album Entity, vous pouvez définir une fonction CopyFrom et l'appeler à partir de votre fonction de mise à jour
partial class Album { public void CopyFrom(Album album) { //individual field copying here } } public void Update(Album album) { ... albumToUpdate.CopyFrom(album); ... }
Pourquoi n'utilisez-vous pas de services de données?
@ashraf, il dit qu'il utilise EF 3.5