2010-07-14 3 views
0

J'ai mis en place une petite application web n-tier en utilisant MVP (Model View Presenter) en frontal, un service WCF sur le backend, qui communique avec le BLL. derrière cela, le DAL, qui communique avec le EF4.0. Tout cela fonctionne très bien, j'ai créé plusieurs méthodes Get et Add qui fonctionnent tous. Maintenant, je voulais créer plusieurs méthodes de mise à jour. Depuis que j'utilise les entités auto-surveillantes (STE) de l'EF4.0, je pensais que tout irait très bien et que la mise en œuvre serait plutôt facile.Les entités de suivi automatique retournent Inchangé dans mon service WCF

Cela ne semble pas être le cas. Lorsque vous modifiez mes éléments dans l'interface Web, ils conservent le statut Inchangé lors du retour au service WCF. Comme l'entité est inchangée, rien n'est mis à jour dans la base de données. Grâce à cette question sur SO: EF 4 Self Tracking Entities does not work as expected Je suis venu à travers l'article en disant quelque chose de plus en détail sur la mise en œuvre des STE avec dans une application à n-tier. (http://msdn.microsoft.com/en-us/magazine/ee335715.aspx) je cite:

Assurez-vous que de réutiliser le de modèle d'entité de autovirants code entité générée sur votre client . Si vous utilisez le code proxy généré par Service Ajouter Référence dans Visual Studio ou un autre outil, choses look pour la plupart, mais vous découvrirez que les entités ne tiennent pas réellement trace de leurs changements sur le client.

Eh bien, je l'ai réussi à créer un client au service en utilisant ce code:

var svc = new ChannelFactory<INorthwindSTEService>(
    "INorthwindSTEService") 
    .CreateChannel(); 

Cela semble fonctionner assez bien. La chose est, comment puis-je obtenir les entités sérialisées sur le client? Dans l'exemple de code que je vois l'auteur utilise ce code:

var products = new List<Product>(svc.GetProducts()); 
var customer = svc.GetCustomer("ALFKI"); 

Mais je ne vois pas où ces objets/entités/??? sont définis (je parle d'un client et Produit)

Je l'ai testé avec les entités qui ont été créées à l'aide du Ajouter un service de référence, mais cela ne semble pas fonctionner. Les entités renvoyées ont toujours le statut Inchangé. Je préfèrerais ne pas référencer les entités EF dans mon frontal, parce que je voudrais les garder séparées et n'avoir que des objets sérialisés sur mon front-end. Bien que, si c'est vraiment nécessaire, je pourrais juste devoir faire cela. Oh, l'utilisation de la méthode MarkAsModified() sur l'objet entité fonctionne bien, mais c'est plus un hack car l'entité devrait vérifier son statut par elle-même.

Un conseil sur la façon de procéder? Je suppose que l'utilisation de la méthode MarkAsModiefied() ou la référence au projet de modèles d'entités dans mon application Web pourrait être une solution de rechange viable, mais s'il y a quelque chose de mieux, j'aimerais d'abord essayer cela.

+0

Vous n'êtes pas qualifié pour répondre mais pouvez peut-être aider un peu. Les objets définis par create service reference et transmis sur le service comprendront des données et non du code. Pour que le suivi automatique fonctionne, vous avez besoin du code dans les entités générées, pas seulement des données. Donc l'article que vous citez vous dit de référencer le modèle d'entité (je ne le fais pas avec EF donc non qualifié) dans votre application client afin que vous obteniez le code de suivi automatique - à quel moment cela devrait fonctionner comme prévu. – Murph

+0

Oui, j'avais peur de devoir le faire. J'espère que quelqu'un d'autre aura une solution différente, ce qui est bon et réalisable, sinon je vais devoir changer mon design actuel. Pas que ce soit une chose complètement mauvaise, parce que j'ai encore appris quelque chose. –

Répondre

0

Vous devez déplacer les entités de suivi de l'auto de projet entité frameowrk

si vous regardez dans le fichier .tt vous verrez qu'il ya un chemin vers la .edmx fichier que vous ahve à remplir.

Ceci vous permettra de les avoir dans un projet séparé du framework d'entité.

Vous pouvez ensuite référencer ce projet à partir de votre frontal et avoir accès aux entités de suivi comme vous le souhaitez.

Comme pour effectuer la mise à jour ... bien im me regardant, p (je ne veux pas vraiment les tamiser dehors dans leurs différents me dit)

-vous que cette « Assurez-vous de réutiliser les Le code d'entité généré par le modèle Self-Tracking Entity sur votre client '

et vous dites que vous ne voulez pas faire cela plus bas.

C'est votre problème.

Questions connexes