2009-03-26 8 views
1

Je tire mes cheveux sur celui-ci. J'essaie d'implémenter un service de données ADO.Net qui utilise un contexte de données Linq to SQL. Je pensais que ça fonctionnait, mais l'URL de l'une de mes tables reçoit toujours une exception.Utilisation de Guid dans le service de données ADO.Net

La différence évidente entre la table qui ne fonctionne pas et celle qui ne l'est pas est que celle qui obtient l'exception utilise un Guid, qui est la clé primaire. Le Guid est un UserID, qui se rapporte réellement à l'UserId utilisé par l'adhésion ASP.net. (Je n'expose pas les tables d'adhésion d'ASP.net, mais je devine que celles-ci casseraient aussi si j'étais.)

C'est un tableau très simple: Nom: UserDetails :: | Guid UtilisateurID | int GroupID (clé étrangère) | Nom de la chaîne |

Quelqu'un sait s'il y a un truc pour faire fonctionner Guids? Ou si c'est peut-être un problème totalement différent?

Voici l'exception du service: Une erreur s'est produite lors du traitement de cette demande. InnerError: Une erreur s'est produite lors du traitement de cette demande.

Type: System.InvalidOperationException

StackTrace: t System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (élément Object, String propertyName, ResourceType expectedType, String relativeURI, contenu DictionaryContent) à System.Data .Services.Serializers.SyndicationSerializer.WriteObjectProperties (IExpandedResult étendu, Object customObject, ResourceType resourceType, Uri absoluteUri, String relativeUri, élément SyndicationItem, contenu DictionaryContent) at System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (élément Object, String propertyName , Ressource Tapez expectedType, String relativeURI, contenu DictionaryContent) à System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties (IExpandedResult étendu, objet customObject, ResourceType resourceType, Uri absoluteURI, String relativeURI, point SyndicationItem, contenu DictionaryContent) au système. Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (élément Object, String propertyName, ResourceType expectedType, String relativeURI, contenu DictionaryContent) à System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties (IExpandedResult expansé, objet customObject, ResourceType resourceType, Uri absoluteUri, chaîne relativeUri, article SyndicationItem, contenu DictionaryContent) à System.Data.Services.Serialize rs.SyndicationSerializer.WriteEntryElement (IExpandedResult étendu, élément Object, type expectedType, Uri absoluteUri, chaîne relativeUri, cible SyndicationItem) à System.Data.Services.Serializers.SyndicationSerializer. <DeferredFeedItems> d__0.MoveNext() à System.ServiceModel.Syndication.Atom10FeedFormatter.WriteItems (écrivain XmlWriter, Articles IEnumerable`1, Uri feedBaseUri) à System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeedTo (écrivain XmlWriter, fourrage SyndicationFeed , Boolean isSourceFeed) à System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed (écrivain XmlWriter) à System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo (écrivain XmlWriter) à System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements (IExpandedResult élargi, les éléments IEnumerator, booléen hasMoved) à System.Data.Services.Serializers.Serializer.WriteRequest (IEnumerator queryResults, Boolean hasMoved) à System.Data.Services.ResponseBodyWriter.Write (flux Stream)

Répondre

0

J'ai trouvé la solution à mon problème. En fait, cela n'était pas lié à l'utilisation d'une valeur Guid.

J'ai dû ajouter un [IgnoreProperties ("User")] à ma classe UserDetail dans Linq to SQL. La propriété "User" est une relation à la classe "User" qui contient les informations d'utilisateur ASP.Net Memberships (le nom de la table est aspnet_Users). J'ai la classe Linq to SQL "User" ignorée par le service de données, donc je pense que cela a dû être le problème. Ce qui m'a égaré, c'est que le service de données ne lançait aucune erreur quand j'y accédais. Avec toutes les autres propriétés, où je devais ajouter une décoration DataServiceKey() ou IgnoreProperties(), lorsque j'accédais à DataService.svc, une exception se plaignait de la propriété de problème. Pour une raison quelconque, cela ne m'a pas posé de problème avec cette propriété, donc je ne savais pas que quelque chose n'allait pas. Et comme vous pouvez le voir ci-dessus, quand j'ai eu une exception, ce n'était pas utile. Pour toute autre personne utilisant Linq To SQL avec ADO.Net Data Services, voici la leçon: Assurez-vous d'utiliser IgnoreProperties() sur toute propriété qui fait référence à une classe que vous ignorez.

Questions connexes