6
votes

Meilleur moyen de transférer un objet-cadre d'entité sur le Web et de retour via JSON

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é manuellement . Ou du moins c'est ce que je fais maintenant. Il n'a pas d'entité d'entité, alors attachez-le échoue. Je finis par avoir à rechercher l'ancien objet et à mettre à jour la propriété informatique par propriété. Des idées autour de ceci? Est la solution pour transmettre l'entitékey autour de mon objet?

Voici ce que j'ai: xxx

et voici ce que je ' J'aime faire , ou quelque chose de similaire : xxx


2 commentaires

Pourquoi n'utilisez-vous pas de services de données?


@ashraf, il dit qu'il utilise EF 3.5


6 Réponses :


0
votes

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.

http://www.haselman.com/blog/jquerytoshipwithastmvcandVisualStudio.aspx

qui vous permettrait de faire toute la manipulation de la DB du côté du client.

http://msdn.microsoft.com/en-us/data /bb931106.aspx


0 commentaires

0
votes

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();


0 commentaires

1
votes

ou vous pouvez utiliser MOWORAPPER pour mapper ces champs pour vous, vous devez donc ajouter une ligne supplémentaire à votre exemple.


1 commentaires

2 lignes réellement - récupérez la clé, puis sur la carte.



1
votes

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();
    }
}


0 commentaires

1
votes

Cela est devenu beaucoup plus facile pour nous à EF 4.0. C'est ce que nous avons fait dans ef 3.5: xxx

et ensuite: xxx

Il devient plus compliqué si vous avez des contraintes de clé étrangère, mais On dirait que tu ne le fais pas.


0 commentaires

0
votes

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);
      ...
    }


0 commentaires