返回TypeMismatchRelationshipConstraint的WCF元数据

时间:2015-01-21 15:57:12

标签: c# entity-framework visual-studio-2012 odata wcf-data-services

我有一个WCF项目,它引用了另一个带有实体框架5 EDMX的DAL项目。

我无法检索我的服务的元数据:http://localhost:12034/DataService.svc/ $ metadata

返回以下错误:

  

发现验证失败的IEdmModel实例。报告了以下错误:   TypeMismatchRelationshipConstraint:引用约束的从属角色中的所有属性的类型必须与主体角色中的相应属性类型相同。物业的类型' TenantID'实体' PScopeModel.Resource'与属性类型不匹配' ResourceTypeID'实体'资源类型'在参考约束中弗雷德'。

     

TypeMismatchRelationshipConstraint:引用约束的从属角色中的所有属性的类型必须与主体角色中的相应属性类型相同。属性类型' ResourceType'实体' PScopeModel.Resource'不符合财产的类型' TenantID'实体'资源类型'在参考约束中弗雷德'。

     

TypeMismatchRelationshipConstraint:引用约束的从属角色中的所有属性的类型必须与主体角色中的相应属性类型相同。物业的类型' TenantID'实体' PScopeModel.Resource'与...不符......

我基本上有以下关系 Relationship

ResourceType表在TenantID + ResourceTypeID上有PK 资源表在TenantID + ResourceID上有PK,在ResourceType上有FK。

这似乎影响了我框架上的所有FK,因为如果我删除当前受影响的关系,它将发生在另一个关系上。

正确显示各个实体:http://localhost:12034/DataService.svc/ResourceTypes

2 个答案:

答案 0 :(得分: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 beta Referential Constraint supportRESTier

答案 1 :(得分:0)

在db中,检查Resource表上ResourceType的数据类型,并验证它与ResourceType表上ResourceTypeID的数据类型相同。对TenantID字段执行相同操作。

只要它们相同,从表中更新您的EDMX,然后右键单击您的EDMX文件并单击,"添加代码生成项"并通过将生成的新文件保存为与当前文件相同的名称并选择覆盖现有文件来替换当前的.tt文件。这将基本刷新您对表及其关系的EDMX引用。

这可能会解决问题。 EDMX很挑剔,如果你没有正确地遵循这些步骤并正确更新,你有时会遇到这些问题。