S#HARP 아키텍처는 많은 사람들과 ADO.NET 데이터 서비스를 많이 매핑합니다. 결과에 대한 단일 리소스가 예상되었지만 여러 리소스가 발견되었습니다.

StackOverflow https://stackoverflow.com/questions/1848549

문제

ADO.NET 데이터 서비스를 통해 NHibernate 및 S#ARP 아키텍처를 사용하여 SQL Server 데이터베이스 (레거시 DB에서 마이그레이션)의 데이터를 읽는 응용 프로그램을 개발하고 있습니다. 나는 다수의 관계를 매핑하려고 노력하고 있습니다. 오류 클래스가 있습니다.

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)? $ 확장 = 그룹 "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">
-^

나는 sourcecode를 본다 데이터를 얻습니다. 그러나 예외는 다음과 같습니다.

<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>

ai 뭔가 빠졌어 ??? 이 오류는 어디에서 왔습니까?

도움이 되었습니까?

해결책 2

나는 이것이 LINQ와 nhibernate의 오류 때문이라고 생각하며, 결과가 하나만 반환하도록 제한 한 후에 일했습니다.

다른 팁

HRM ...이 오류에 익숙하지는 않지만 게으른 하중과 관련이 있는지 궁금합니다. 현재 매핑으로 인해 자식 수집이 액세스 할 때 쿼리가 발생하여 직렬화가 괴로워 질 수 있습니다. nhibernate proxied 객체를 직렬화하는 것은 부두로 가득 찬 엉덩이에 큰 고통입니다. 아래 예제와 같이 매핑을 변경하고 계속 허용되는지 확인하십시오.

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