1

我正在把头发拉出来。我正在尝试实现使用 Linq to SQL 数据上下文的 ADO.Net 数据服务。我以为我可以正常工作,但我的一张表的 URL 总是出现异常。

不工作的表和正常工作的表之间的明显区别在于,获得异常的表使用的是主键 Guid。Guid 是一个 UserID,它实际上与 ASP.net Membership 使用的 UserId 相关。(我没有公开 ASP.net 成员表,但我猜如果我公开这些表也会中断。)

这是一个非常简单的表:名称:UserDetails :: | 指导用户 ID | int GroupID (外键) | 字符串名称 |

有人知道让Guids工作是否有技巧吗?或者,如果这可能是一个完全不同的问题?

以下是服务的异常:处理此请求时发生错误。

InnerError:处理此请求时发生错误。

类型:System.InvalidOperationException

StackTrace: t System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(IExpandedResult 扩展,对象 customObject,ResourceType在 System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue(Object element, String propertyName, ResourceType expectedType, String relativeUri, DictionaryContent content) 在 System.Data.Services.Serializers 的 resourceType、Uri absoluteUri、String relativeUri、SyndicationItem 项、DictionaryContent 内容) .SyndicationSerializer.WriteObjectProperties(IExpandedResult 扩展,对象 customObject,ResourceType resourceType,Uri absoluteUri,字符串 relativeUri,SyndicationItem 项,DictionaryContent 内容)在 System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(IExpandedResult 扩展,对象 customObject、ResourceType resourceType、Uri absoluteUri、String relativeUri、SyndicationItem 项、DictionaryContent 内容)在 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。在 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed(XmlWriter writer) 在 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeedTo(XmlWriter writer, SyndicationFeed feed, Boolean isSourceFeed) 上的 WriteItems(XmlWriter writer, IEnumerable`1 items, Uri feedBaseUri)。 System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements(IExpandedResult 扩展,IEnumerator 元素,布尔 hasMoved)在 System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults,Boolean)的 ServiceModel.Syndication.Atom10FeedFormatter.WriteTo(XmlWriter writer) hasMoved) 在 System.Data.Services.ResponseBodyWriter.Write(Stream 流)SyndicationFeed 提要,布尔 isSourceFeed) 在 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed(XmlWriter writer) 在 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo(XmlWriter writer) 在 System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements(IExpandedResult 扩展, IEnumerator 元素,Boolean hasMoved) 在 System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved) 在 System.Data.Services.ResponseBodyWriter.Write(Stream 流)SyndicationFeed 提要,布尔 isSourceFeed) 在 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed(XmlWriter writer) 在 System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo(XmlWriter writer) 在 System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements(IExpandedResult 扩展, IEnumerator 元素,Boolean hasMoved) 在 System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved) 在 System.Data.Services.ResponseBodyWriter.Write(Stream 流)IEnumerator 元素,Boolean hasMoved) 在 System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved) 在 System.Data.Services.ResponseBodyWriter.Write(Stream 流)IEnumerator 元素,Boolean hasMoved) 在 System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved) 在 System.Data.Services.ResponseBodyWriter.Write(Stream 流)

4

2 回答 2

1

这看起来像一个错误。我建议您在http://connect.microsoft.com/visualstudio/上报告它,然后在此处发布您的错误报告的 URL,以便我们对其进行投票。

于 2009-03-26T22:50:43.427 回答
0

我找到了解决问题的方法。它实际上根本与使用 Guid 值无关。

我必须在 Linq to SQL 的 UserDetail 类中添加一个 [IgnoreProperties("User")]。

“User”属性是与“User”类的关系,该类包含 ASP.Net Memberships 用户信息(实际表名是 aspnet_Users)。我的 Linq to SQL“用户”类被数据服务忽略了,所以我认为这一定是问题所在。

让我失望的是,当我访问数据服务时,它没有抛出任何错误。对于所有其他属性,我必须添加 DataServiceKey() 或 IgnoreProperties() 装饰,当我访问 DataService.svc 时,我会收到一个抱怨问题属性的异常。不管出于何种原因,它并没有给我这个属性带来问题,所以我不知道有什么问题。正如您在上面看到的,当我确实遇到异常时,它没有用。

因此,对于将 Linq To SQL 与 ADO.Net 数据服务一起使用的任何其他人,这就是教训:确保在引用您忽略的类的任何属性上使用 IgnoreProperties()。

于 2009-03-27T15:55:14.307 回答