在ADO.Net数据服务中使用Guid

时间:2009-03-26 22:46:42

标签: linq-to-sql guid wcf-data-services

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

表不起作用的表和正在使用的表之间的区别在于获得异常的表是使用Guid,这是主键。 Guid是UserID,实际上与ASP.net Membership使用的UserId有关。 (我没有暴露ASP.net会员表,但我猜这些如果我这样会破坏。)

这是一个非常简单的表格: 名称:UserDetails :: | Guid UserID | int GroupID(外键)|字符串名称|

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

以下是该服务的例外情况: 处理此请求时发生错误。

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

类型:System.InvalidOperationException

堆栈跟踪: t System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue(Object element,String propertyName,ResourceType expectedType,String relativeUri,DictionaryContent content)    在System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(扩展的IExpandedResult,Object customObject,ResourceType resourceType,Uri absoluteUri,String relativeUri,SyndicationItem item,DictionaryContent content)    at System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue(Object element,String propertyName,ResourceType expectedType,String relativeUri,DictionaryContent content)    在System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(扩展的IExpandedResult,Object customObject,ResourceType resourceType,Uri absoluteUri,String relativeUri,SyndicationItem item,DictionaryContent content)    at System.Data.Services.Serializers.SyndicationSerializer.WriteComplexObjectValue(Object element,String propertyName,ResourceType expectedType,String relativeUri,DictionaryContent content)    在System.Data.Services.Serializers.SyndicationSerializer.WriteObjectProperties(扩展的IExpandedResult,Object customObject,ResourceType resourceType,Uri absoluteUri,String relativeUri,SyndicationItem item,DictionaryContent content)    at System.Data.Services.Serializers.SyndicationSerializer.WriteEntryElement(IexpandedResult expanded,Object element,Type expectedType,Uri absoluteUri,String relativeUri,SyndicationItem target)    在System.Data.Services.Serializers.SyndicationSerializer。< DeferredFeedItems> d__0.MoveNext()    在System.ServiceModel.Syndication.Atom10FeedFormatter.WriteItems(XmlWriter writer,IEnumerable`1 items,Uri feedBaseUri)    在System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeedTo(XmlWriter writer,SyndicationFeed feed,Boolean isSourceFeed)    在System.ServiceModel.Syndication.Atom10FeedFormatter.WriteFeed(XmlWriter writer)    在System.ServiceModel.Syndication.Atom10FeedFormatter.WriteTo(XmlWriter writer)    在System.Data.Services.Serializers.SyndicationSerializer.WriteTopLevelElements(IExpandedResult扩展,​​IEnumerator元素,布尔hasMoved)    在System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults,Boolean hasMoved)    在System.Data.Services.ResponseBodyWriter.Write(Stream stream)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

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

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