小号#竖琴架构映射多对多和ado.net数据服务:单一的资源被预期的结果,但是发现多个资源
题
我正在开发通过ADO.NET数据服务,从SQL Server数据库(从旧数据库迁移)读取数据的应用程序与NHibernate和S#ARP架构。我试图映射许多一对多的关系。我有一个故障类别:
public class Error
{
public virtual int ERROR_ID { get; set; }
public virtual string ERROR_CODE { get; set; }
public virtual string DESCRIPTION { get; set; }
public virtual IList<ErrorGroup> GROUPS { get; protected set; }
}
然后我有错误组类:
public class ErrorGroup
{
public virtual int ERROR_GROUP_ID {get; set;}
public virtual string ERROR_GROUP_NAME { get; set; }
public virtual string DESCRIPTION { get; set; }
public virtual IList<Error> ERRORS { get; protected set; }
}
和的替换值:
public class ErrorGroupOverride : IAutoMappingOverride<ErrorGroup>
{
public void Override(AutoMapping<ErrorGroup> mapping)
{
mapping.Table("ERROR_GROUP");
mapping.Id(x => x.ERROR_GROUP_ID, "ERROR_GROUP_ID");
mapping.IgnoreProperty(x => x.Id);
mapping.HasManyToMany<Error>(x => x.Error)
.Table("ERROR_GROUP_LINK")
.ParentKeyColumn("ERROR_GROUP_ID")
.ChildKeyColumn("ERROR_ID").Inverse().AsBag();
}
}
public class ErrorOverride : IAutoMappingOverride<Error>
{
public void Override(AutoMapping<Error> mapping)
{
mapping.Table("ERROR");
mapping.Id(x => x.ERROR_ID, "ERROR_ID");
mapping.IgnoreProperty(x => x.Id);
mapping.HasManyToMany<ErrorGroup>(x => x.GROUPS)
.Table("ERROR_GROUP_LINK")
.ParentKeyColumn("ERROR_ID")
.ChildKeyColumn("ERROR_GROUP_ID").AsBag();
}
}
当我在喜欢的浏览器中查看数据服务:http://localhost:1905/DataService.svc/Errors
它表明,没有任何问题的错误列表,并使用它像http://localhost:1905/DataService.svc/Errors(123)
工程太
<强>问题强> 当我想看到一群中的错误或基团形成的错误,如:“ HTTP ://本地主机:1905年/ DataService.svc /错误(123) $扩大=组”我得到的XML文档,但浏览器说:
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
--------------------------------------------------------------------------------
Only one top level element is allowed in an XML document. Error processing resource 'http://localhost:1905/DataServic...
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
-^
我查看源代码,和我得到的数据即可。然而它带有一个例外:
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code></code>
<message xml:lang="en-US">An error occurred while processing this request.</message>
<innererror xmlns="xmlns">
<message>A single resource was expected for the result, but multiple resources were found.</message>
<type>System.InvalidOperationException</type>
<stacktrace> at System.Data.Services.Serializers.Serializer.WriteRequest(IEnumerator queryResults, Boolean hasMoved)
at System.Data.Services.ResponseBodyWriter.Write(Stream stream)</stacktrace>
</innererror>
</error>
:一种我缺少的东西???哪里从何而来这个问题?
解决方案 2
我认为这是由于与LINQ和NHibernate错误,工作后我限制的结果,只有一个返回。
其他提示
HRM ......不熟悉这个错误,但我不知道是否有事情做与延迟加载。您当前的映射会导致孩子集合进行查询时,访问它可能会导致序列化怪胎出来。序列化NHibernate的代理对象是在屁股大规模苦满巫术的。尝试改变如下面的例子您的映射,看看它是否允许您继续。
public class ErrorOverride : IAutoMappingOverride<Error>
{
public void Override(AutoMapping<Error> mapping)
{
mapping.Table("ERROR");
mapping.Id(x => x.ERROR_ID, "ERROR_ID");
mapping.IgnoreProperty(x => x.Id);
mapping.HasManyToMany<ErrorGroup>(x => x.GROUPS)
.Table("ERROR_GROUP_LINK")
.ParentKeyColumn("ERROR_ID")
.ChildKeyColumn("ERROR_GROUP_ID").Not.Lazy().AsBag();
}
}
不隶属于 StackOverflow