2009-03-26 5 views
1

나는이 하나에 내 머리카락을 당길거야. Linq to SQL 데이터 컨텍스트를 사용하는 ADO.Net 데이터 서비스를 구현하려고합니다. 나는 그것이 작동한다고 생각했지만, 나의 테이블 중 하나에 대한 URL은 항상 예외를 얻는다.ADO.Net 데이터 서비스에서 GUID 사용

작동하지 않는 테이블과 예외가있는 테이블의 명백한 차이점은 예외를 얻는 테이블은 기본 키인 Guid를 사용한다는 것입니다. Guid는 ASP.net Membership에서 사용하는 UserId와 실제로 관련된 UserID입니다. (나는 ASP.net Membership 테이블을 노출시키지 않고있다. 그러나 이것들이 너무 복잡하다면 짐작할 수있다.)

매우 간단한 테이블이다 : 이름 : UserDetails :: | Guid 사용자 ID | int GroupID (외래 키) | 문자열 이름 |

Guids를 사용하는 데 필요한 트릭이 있는지 아는 사람이 있습니까? 아니면 이것이 완전히 다른 문제일까요?

다음은 서비스 예외입니다. 이 요청을 처리하는 동안 오류가 발생했습니다.

InnerError :이 요청을 처리하는 동안 오류가 발생했습니다.

유형 : System.InvalidOperationException 스택 트레이스

: t의 System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (개체 요소, 문자열 propertyName 형식, ResourceType에있는 expectedType, 문자열 relativeUri, DictionaryContent 내용) System.Data에서 .Services.Serializers.SyndicationSerializer.WriteObjectProperties (IExpandedResult, Object customObject, ResourceType resourceType, Uri absoluteUri, String relativeUri, SyndicationItem 항목, DictionaryContent 내용) at System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (Object 요소, String propertyName , 자원 System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties (IExpandedResult, Object customObject, ResourceType resourceType, Uri absoluteUri, String relativeUri, SyndicationItem 항목, DictionaryContent 내용)에서 에있는 시스템에서 의 expectedType, String relativeUri, DictionaryContent 콘텐츠를 입력하십시오. Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue (Object 요소, String propertyName, ResourceType expectedType, String relativeUri, DictionaryContent 콘텐츠) at System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties (IExpandedResult, Object customObject, ResourceType resourceType, Uri absoluteUri, String relativeUri, SyndicationItem 항목, 사전 콘텐츠) at System.Data.Services.Serialize rs.SyndicationSerializer.WriteEntryElement (IExpandedResult, Object 요소, expectedType 형식, Uri absoluteUri, String relativeUri, SyndicationItem 대상을 확장했습니다.) (System.Data.Services.Serializers.SyndicationSerializer) <DeferredFeedItems> d__0.MoveNext() System.ServiceModel.Syndication.Atom10FeedFormatter.WriteItems (XmlWriter를 작가, IEnumerable`1 항목, 열린 우리당 feedBaseUri) System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeedTo에서 (XmlWriter를 작가의 , SyndicationFeed 공급 System.Data.Services.Serializers.SyndicationSerializer에서 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo에서 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed (XmlWriter를 작가) 에서, 부울 isSourceFeed) (XmlWriter를 작가) .WriteTopLevelElements (IExpandedResult가 확대를 IEnumerator 요소 부울 hasMoved) System.Data.Services.Serializers.Serializer.WriteRequest (IEnumerator를 queryResults 부울 hasMoved) System.Data.Services.ResponseBodyWriter.Write에서 (스트림 스트림)

에서

답변

0

문제점에 대한 해결책을 찾았습니다. 실제로 Guid 값을 전혀 사용하지 않았습니다.

[IgnoreProperties ("User")]를 SQL에 Linq의 UserDetail 클래스에 추가해야했습니다.

"사용자"속성은 ASP.Net 멤버쉽 사용자 정보 (실제 테이블 이름은 aspnet_Users)를 보유하고있는 "사용자"클래스와 관련이 있습니다. 나는 Linq to SQL "User"클래스를 데이터 서비스에서 무시 했으므로 이것이 문제 였음에 틀림 없다고 생각한다.

데이터 서비스가 액세스 할 때 데이터 서비스가 던지지 않는 것이 무엇이 었는지 궁금합니다. DataService.svc에 액세스 할 때 DataServiceKey() 또는 IgnoreProperties() 데코 레이션을 추가해야하는 다른 모든 속성을 사용하면 문제가있는 속성에 대해 예외가 발생합니다. 이유가 무엇이든간에이 속성에 문제가되지 않았으므로 잘못된 점은 전혀 모르고있었습니다. 위에서 볼 수 있듯이 예외가 생겼을 때 유용하지 않았습니다.

ADO.Net 데이터 서비스와 함께 Linq To SQL을 사용하는 다른 모든 사용자에게는 다음이 포함됩니다. 무시중인 클래스를 참조하는 모든 속성에서 IgnoreProperties()를 사용해야합니다.