1

엔티티 프레임 워크 5 EDMX가있는 다른 DAL 프로젝트를 참조하는 WCF 프로젝트가 있습니다.TypeMismatchRelationshipConstraint를 반환하는 WCF 메타 데이터

내 서비스의 메타 데이터를 검색 할 수 없습니다 : http://localhost:12034/DataService.svc/ $ 메타 데이터

그것의 반환 다음과 같은 오류 :

IEdmModel 인스턴스가 유효성 검사에 실패하였습니다. 다음 오류가보고되었습니다. TypeMismatchRelationshipConstraint : 참조 제한 조건의 종속 역할에있는 모든 특성 유형이 주 역할의 해당 특성 유형과 동일해야합니다. 엔터티 'PScopeModel.Resource'의 'TenantID'속성 유형이 참조 제약 조건 'Fred'의 'ResourceType'엔터티의 'ResourceTypeID'속성 유형과 일치하지 않습니다.

TypeMismatchRelationshipConstraint : 참조 제한 조건의 종속 역할에있는 모든 특성 유형이 주 역할의 해당 특성 유형과 동일해야합니다. 엔티티 'PScopeModel.Resource'의 'ResourceType'속성 유형이 참조 제약 조건 'Fred'의 'ResourceType'엔터티의 'TenantID'속성 유형과 일치하지 않습니다.

TypeMismatchRelationshipConstraint : 참조 제한 조건의 종속 역할에있는 모든 특성 유형이 주 역할의 해당 특성 유형과 동일해야합니다. TY가 일치하지 않는 기업 'PScopeModel.Resource'에 재산 'TenantID'의 유형 ...

나는 기본적으로 Relationship

ResourceType에 테이블이 TenantID + ResourceTypeID 자원 테이블에 PK를 가지고 관계를 다음이 TenantID + ResourceID에는 PK가 있고 ResourceType에는 FK가 있습니다.

현재 영향을받는 관계를 제거하면 다른 관계에서 발생하므로 내 프레임 워크의 모든 FK에 영향을 미치는 것 같습니다.

개별 개체가 올바르게 표시됩니다 : 당신의 DB에 http://localhost:12034/DataService.svc/ResourceTypes

+0

클라이언트 구성을 확인하고 ServiceModel을 확인하십시오. 아마도 WCF 서비스가 보내는 것과는 다른 customBinding이있을 것입니다. – Mez

+0

@Mez, 이것이 구성과 관련이 있다고 생각합니까? http : // localhost : 12034/DataService.svc /? wsdl을 호출하면 정상적으로 작동합니다. '<는 system.serviceModel> '' ''' <으로 WebHttpBinding> <바인딩 이름 = "webHttpTransportSecurity"> <보안 모드 = "전송"> <전송 clientCredentialType = "기본"> ' –

답변

3

복합 키의 순서가있는 WCF 데이터 서비스의 문제로 보입니다. 관련 스레드 : Getting Metadata TypeMismatchRelationshipConstraint error for WCF Data Services project.

키가 데이터 서비스 유형 : ResourceType으로 정렬 된 다음 엔티티 유형으로 전파되지만 navigationProperty의 종속 속성에서는 정렬되지 않습니다.

해결 방법은 사례의 모델 확인을 사용 중지하는 것입니다.:

public static void InitializeService(DataServiceConfiguration config) 
{ 
    ... 
    config.DisableValidationOnMetadataWrite = true; 

또는 그것을 시도 줄에 대한 OData Web API5.4 betaReferential Constraint support, 또는 RESTier을 가지고있다.

0

은 자원 테이블에 ResourceType에의 데이터 유형을 확인하고는 ResourceType에 테이블에 ResourceTypeID의 동일한 데이터 형식입니다 확인합니다. TenantID 필드에 대해서도 동일한 작업을 수행하십시오.

동일하다면 테이블에서 EDMX를 업데이트 한 다음 EDMX 파일을 마우스 오른쪽 버튼으로 클릭하고 "코드 생성 항목 추가"를 클릭하고 현재의 .tt 파일을 현재 위치의 새로운 파일을 저장하여 대체하십시오 현재 파일과 동일한 이름으로 생성하고 기존 파일을 겹쳐 쓰도록 선택합니다. 이것은 기본적으로 테이블과 그 관계에 대한 EDMX 참조를 새로 고칩니다.

이렇게하면 문제가 해결 될 수 있습니다. EDMX는 까다롭기 때문에 단계를 제대로 따르지 않고 올바르게 업데이트하지 않으면 이러한 문제가 발생할 수 있습니다.

+0

두 테이블이 동일한 유형 및 크기의 필드가 있습니다. 코드 생성 항목 추가 단계를 시도했지만 여전히 같은 오류가 발생했습니다. 이 데이터 서비스는 이전에 동일한 테이블을 사용하여 정상적으로 작동합니다. 나는 최근에 다른 새로운 테이블을 추가했는데,이 오류가 발생했다. –

+0

한가지 이유는 ** Resource.ResourceType을 ResourceType.TenantID **에 일치 시키려고하는 이유입니다. ResourceType.TenantID **에 ** Resource.TenantID 여야합니다. –

+0

"데이터베이스에서 업데이트 하시겠습니까?" EDMX를 삭제하고 완전히 읽어야 할 수도 있습니다. –