代码之家  ›  专栏  ›  技术社区  ›  Leg10n

S#harp体系结构映射多对多和ado.net数据服务:预期结果为单个资源,但找到了多个资源

  •  0
  • Leg10n  · 技术社区  · 16 年前

    我正在开发一个应用程序,通过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://localhost:1905/DataService.svc/Errors(123)

    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>
    

    A我错过了什么???这个错误是从哪里来的?

    2 回复  |  直到 16 年前
        1
  •  0
  •   SWD    16 年前

    人力资源管理。。。不熟悉这个错误,但我想知道它是否与延迟加载有关。当前映射将导致在访问子集合时查询它,这可能会导致序列化崩溃。序列化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();
        }
    }
    
        2
  •  0
  •   Leg10n    16 年前

    推荐文章