wcf数据服务 - 在数据模型中公开相同类型的属性

时间:2012-06-21 10:38:19

标签: wcf wcf-data-services

我是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; }
}

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

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

当我摆脱这两个属性中的一个时,服务就开始工作了。

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

1 个答案:

答案 0 :(得分:2)

同志

要首先解决错误,您将遇到Reflection提供程序中的限制。具体而言,Reflection提供程序不支持MEST

也就是说,有更好的方法来实现您想要实现的目标。您可能不应该将IntegerSum设置为实体类型(实体类型是唯一可识别的实体,它不适合您的方案)。虽然您无法直接公开,但可以将其公开为service operation。这似乎更接近你想要实现的目标。

有两种方法可以区分某些事物是否应该是一个实体:

  1. 如果它已经存在密钥,例如数据库中的PK,则它应该是实体类型
  2. 如果您需要单独创建/更新/删除对象,则它必须是实体类型
  3. HTH, 标记