1

私はこれで髪を引っ張っています。Linq to SQL データ コンテキストを使用する ADO.Net Data Service を実装しようとしています。動作していると思っていましたが、テーブルの 1 つの URL で常に例外が発生します。

機能していないテーブルと機能しているテーブルの明らかな違いは、例外が発生したテーブルが主キーである Guid を使用していることです。Guid は UserID であり、実際には ASP.net メンバーシップで使用される UserId に関連しています。(私は ASP.net メンバーシップ テーブルを公開していませんが、公開していればこれらも壊れると思います。)

これは非常に単純なテーブルです: 名前: UserDetails :: | ガイド ユーザー ID | int GroupID (外部キー) | 文字列名 |

Guid を機能させるための秘訣があるかどうか知っている人はいますか? それとも、これがまったく別の問題なのだろうか?

サービスからの例外は次のとおりです。この要求の処理中にエラーが発生しました。

InnerError: このリクエストの処理中にエラーが発生しました。

タイプ: System.InvalidOperationException

StackTrace: t System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue(Object 要素、文字列 propertyName、ResourceType expectedType、文字列 relativeUri、DictionaryContent コンテンツ) で System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(IExpandedResult 展開、オブジェクト customObject、ResourceType System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (オブジェクト要素、文字列 propertyName、ResourceType expectedType、文字列 relativeUri、DictionaryContent コンテンツ) で System.Data.Services.Serializers .SyndicationSerializer.WriteObjectProperties(IExpandedResult 展開、オブジェクト customObject、ResourceType resourceType、Uri absoluteUri、String relativeUri、System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue(Object 要素、文字列 propertyName、ResourceType expectedType、文字列 relativeUri、DictionaryContent コンテンツ) で System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(IExpandedResult 展開、 System.Data.Services.Serializers.SyndicationSerializer.WriteEntryElement(拡張された IExpandedResult、オブジェクト要素、タイプ expectedType、Uri absoluteUri、文字列 relativeUri、SyndicationItem ターゲット) System.Data.Services.Serializers.SyndicationSerializer.<DeferredFeedItems>d__0.MoveNext() System.ServiceModel.Syndication.Atom10FeedFormatter で。WriteItems(XmlWriter writer, IEnumerable`1 items, Uri feedBaseUri) at System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeedTo(XmlWriter writer, SyndicationFeed feed, Boolean isSourceFeed) at System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed(XmlWriter writer) at System. ServiceModel.Syndication.Atom10FeedFormatter.WriteTo (XmlWriter ライター) System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements (展開された IExpandedResult、IEnumerator 要素、ブール値 hasMoved) で System.Data.Services.Serializers.Serializer.WriteRequest (IEnumerator queryResults、ブール値) hasMoved) System.Data.Services.ResponseBodyWriter.Write (ストリーム ストリーム) でSystem.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed (XmlWriter ライター) の System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo (XmlWriter ライター) の SyndicationFeed フィード、ブール値 isSourceFeed) System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults、Boolean hasMoved) の System.Data.Services.ResponseBodyWriter.Write(ストリーム ストリーム) の IEnumerator 要素、Boolean hasMoved)System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed (XmlWriter ライター) の System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo (XmlWriter ライター) の SyndicationFeed フィード、ブール値 isSourceFeed) System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults、Boolean hasMoved) の System.Data.Services.ResponseBodyWriter.Write(ストリーム ストリーム) の IEnumerator 要素、Boolean hasMoved)System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults、Boolean hasMoved) の System.Data.Services.ResponseBodyWriter.Write(ストリーム ストリーム) の IEnumerator 要素、Boolean hasMoved)System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults、Boolean hasMoved) の System.Data.Services.ResponseBodyWriter.Write(ストリーム ストリーム) の IEnumerator 要素、Boolean hasMoved)

4

2 に答える 2

1

それはバグのように見えます。http://connect.microsoft.com/visualstudio/で報告してから、バグ レポートの URL をここに投稿して、投票できるようにすることをお勧めします。

于 2009-03-26T22:50:43.427 に答える
0

問題の修正が見つかりました。実際には、Guid 値の使用とはまったく関係がありませんでした。

[IgnoreProperties("User")] を Linq to SQL の UserDetail クラスに追加する必要がありました。

「ユーザー」プロパティは、ASP.Net メンバーシップのユーザー情報を保持する「ユーザー」クラスとの関係です (実際のテーブル名は aspnet_Users です)。Linq to SQL の "User" クラスがデータ サービスによって無視されているため、これが問題だったに違いないと思います。

私を驚かせたのは、データ サービスにアクセスしたときに、データ サービスがエラーをスローしなかったことです。他のすべてのプロパティでは、DataServiceKey() または IgnoreProperties() の装飾を追加する必要がありましたが、DataService.svc にアクセスすると、問題のプロパティに関する例外が発生しました。なんらかの理由で、この 1 つのプロパティで問題が発生することはなかったので、何か問題があることに気づきませんでした。そして、上で見たように、例外が発生したとき、それは役に立ちませんでした。

したがって、ADO.Net Data Services で Linq To SQL を使用している他の人には、これが教訓です。無視するクラスを参照するすべてのプロパティで IgnoreProperties() を使用するようにしてください。

于 2009-03-27T15:55:14.307 に答える