我有一个WCF项目,它引用了另一个具有实体框架5 EDMX的DAL项目。
我无法检索服务的元数据:http://localhost:12034/DataService.svc/ $ metadata
其返回以下错误:
发现IEdmModel实例验证失败。报告了以下错误:
TypeMismatchRelationshipConstraint:引用约束的从属角色中的所有属性的类型必须与主体角色中相应的属性类型相同。实体“ PScopeModel.Resource”上的属性“ TenantID”的类型与引用约束“ Fred”中实体“ ResourceType”上的属性“ ResourceTypeID”的类型不匹配。
TypeMismatchRelationshipConstraint:引用约束的从属角色中的所有属性的类型必须与主体角色中相应的属性类型相同。实体“ PScopeModel.Resource”上的属性“ ResourceType”的类型与引用约束“ Fred”中实体“ ResourceType”上的属性“ TenantID”的类型不匹配。
TypeMismatchRelationshipConstraint:引用约束的从属角色中的所有属性的类型必须与主体角色中相应的属性类型相同。实体“ PScopeModel.Resource”上的属性“ TenantID”的类型与类型不匹配。
我基本上有以下关系
ResourceType表在TenantID + ResourceTypeID上具有PK
资源表在TenantID + ResourceID上具有PK,在ResourceType上具有FK。
这似乎正在影响我框架上的所有FK,因为如果我删除当前受影响的关系,它将在另一个关系上发生。
各个实体正确显示:http://localhost:12034/DataService.svc/ResourceTypes
最佳答案
这似乎是WCF数据服务与组合键的顺序有关的问题。相关线程:Getting Metadata TypeMismatchRelationshipConstraint error for WCF Data Services project。
键按数据服务类型:ResourceType排序,然后传播到实体类型,但不按NavigationProperty的从属属性排序。
一种解决方案是针对这种情况禁用模型验证,例如:
public static void InitializeService(DataServiceConfiguration config)
{
...
config.DisableValidationOnMetadataWrite = true;
或者,尝试使用OData Web API或5.4 beta的Referential Constraint support的RESTier。