2

我是 WCF 数据服务的新手。我有一个非常简单的数据模型。它的一些属性具有相同的类型,如下所示:

public IQueryable<IntegerSum> HouseholdGoodsSums
{
    get
    {
        return GetData<IntegerSum>(DefaultProgramID, "rHouseholdGoodsPrice", IntegerSumConverter);
    }
}

public IQueryable<IntegerSum> StructureSums
{
    get
    {
        return GetData<IntegerSum>(DefaultProgramID, "rStructurePrice", IntegerSumConverter);
    }
}

IntegerSum 是一个非常简单的类:

[DataServiceKey("Amount")]
public class IntegerSum
{
    public int Amount { get; set; }
}

当我在 Web 浏览器中导航到我的服务时,我看到以下错误消息:

服务器在处理请求时遇到错误。异常消息是 'Property 'HouseholdGoodsSums' 和 'StructureSums' 是 IQueryable 类型的 'IntegrationServices.PropertyIntegrationServices.IntegerSum' 和 'IntegrationServices.PropertyIntegrationServices.IntegerSum' 并且类型 'IntegrationServices.PropertyIntegrationServices.IntegerSum' 是类型 'IntegrationServices.PropertyIntegrationServices 的祖先.IntegerSum'。请确保每个类型层次结构只有一个 IQueryable 属性。'。

当我摆脱这两个属性之一时,服务开始工作。

我在 google 中搜索了此错误消息,但没有找到解决方案。数据模型中真的不允许有两个相同类型的属性吗?如果是这样,为什么?

4

1 回答 1

2

同志,

要首先解决该错误,您会遇到反射提供程序的限制。具体来说,反射提供程序不支持MEST

也就是说,有更好的方法可以实现您想要实现的目标。您可能不应该将 IntegerSum 设为实体类型(实体类型是唯一可识别的实体,它并不真正适合您的场景)。虽然您不能直接公开它,但您可以将其公开为服务操作。这似乎更接近您想要实现的目标。

区分某物是否应该是实体的几种方法:

  1. 如果它已经有一个键,例如数据库中的一个 PK,它可能应该是一个实体类型
  2. 如果需要独立创建/更新/删除对象,必须是实体类型

HTH,马克

于 2012-06-21T21:51:04.813 回答