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 ブラウザーでサービスに移動すると、次のエラー メッセージが表示されます。

サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは、「プロパティ 'HouseholdGoodsSums' および 'StructureSums' は、タイプ 'IntegrationServices.PropertyIntegrationServices.IntegerSum' および 'IntegrationServices.PropertyIntegrationServices.IntegerSum' の IQueryable であり、タイプ 'IntegrationServices.PropertyIntegrationServices.IntegerSum' はタイプ 'IntegrationServices.PropertyIntegrationServices の祖先です」です。 .IntegerSum'. 型階層ごとに IQueryable プロパティが 1 つだけであることを確認してください。

これら 2 つのプロパティのいずれかを取り除くと、サービスが機能し始めます。

Google でこのエラー メッセージを検索しましたが、解決策が見つかりませんでした。データ モデルで同じタイプの 2 つのプロパティを持つことは本当に許可されていないのでしょうか? もしそうなら、なぜですか?

4

1 に答える 1

2

同志、

最初にエラーに対処するには、 Reflectionプロバイダーの制限に直面しています。具体的には、Reflection プロバイダーはMESTをサポートしていません。

そうは言っても、達成しようとしていることを達成するためのより良いアプローチがあります。おそらく、IntegerSum をエンティティ タイプにするべきではありません (エンティティ タイプは一意に識別可能なエンティティであり、実際にはシナリオに適合しません)。それを直接公開することはできませんが、サービス操作として公開することはできます。それはあなたが達成しようとしているものにはるかに近いようです。

何かがエンティティであるべきかどうかを区別するいくつかの方法:

  1. データベースの PK など、既にキーがある場合は、おそらくエンティティ型である必要があります。
  2. オブジェクトを個別に作成/更新/削除する必要がある場合は、エンティティ タイプである必要があります

HTH、マーク

于 2012-06-21T21:51:04.813 に答える