【问题标题】:WCF metadata returning TypeMismatchRelationshipConstraintWCF 元数据返回 TypeMismatchRelationshipConstraint
【发布时间】:2015-01-21 15:57:11
【问题描述】:

我有一个 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

【问题讨论】:

  • 检查您的客户端配置并检查 ServiceModel。很可能存在与 WCF 服务发送的不同的 customBinding。
  • @Mez,您认为这与配置有关吗?调用localhost:12034/DataService.svc/?wsdl 工作正常。 ` ` ` ` ` ` `

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


【解决方案1】:

这似乎是复合键顺序的 WCF 数据服务问题。相关主题:Getting Metadata TypeMismatchRelationshipConstraint error for WCF Data Services project

key在数据服务类型中排序:ResourceType,然后传播到实体类型,但在navigationProperty的依赖属性中没有排序。

解决方案是禁用案例的模型验证,例如:

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

或者,尝试一下OData Web API5.4 beta,它有Referential Constraint supportRESTier

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 两个表的字段类型和大小完全相同。我尝试了您的 Add Code Generation Item 步骤,但仍然出现同样的错误。此数据服务在使用相同的表之前可以正常工作。最近刚加了一些其他的新表,就出现了这个错误。
    • 有一件事我不确定它为什么要尝试将 Resource.ResourceType 与 ResourceType.TenantID 匹配。它应该是 Resource.TenantID 到 ResourceType.TenantID
    • 您确定“从数据库更新”吗?您可能需要删除您的 EDMX 并完全阅读它。
    • 是的,从数据库更新完成。即使重新创建它也无济于事。如果我忽略上面的 Resource 和 ResourceType 表,它会发生在与复合键的其他关系上。
    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2011-02-28
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多