我正在开发通过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)&#xD;
   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();
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top