ODataのV4での双方向ナビゲーション

勝利:

それはちょうど私の問題を解決するかどうか(あなたが詳細な標準的な解決策を持っていない場合)*私は恵みと答えを受け入れます*

私は、ブラウザからのメタデータにアクセスしようとすると(のhttp://......Service.svc/ $メタデータ)、私はエラーの下に表示されます。

500 名前のナビゲーションプロパティを見つけることができません:型ProjectConfigでprojectConfigs

私は(私はパートナー、?!利用可能な他の方法を使用しています)のOData V4での双方向の関連を設計しようとしています。私はそれを実装しながら、私がやっているのミスが何であるかわかりません。

私は2つのクラス、すなわち「プロジェクト」と「ProjectConfig」を持っています。私はプロジェクトからProjectConfigおよびその逆へのナビゲーションを必要としています。アイデアは、定義されたプロジェクトのために、私はProjectConfig(urations)を見ることができるはずということで、そこから私はそれが属するプロジェクトへのナビゲーションバックをしたいです。

私は、アプリケーションのコードを書くためOlingoフレームワークを使用しています。これは私が続く例です。

私はこの例でわかるの課題は、「製品」とのEntitySet名「製品」は、同じであることナビゲーション名です。

私たちは、ナビゲーション上のパートナーを定義する私の理解のために、我々は、「ナビゲーション・タイプ」で同じ名前のプロパティを見つけることができるはずです。これは、理想的には、セットアップentitytypeへのナビゲーションバックになります。

私が興味のあるメタデータおよびJavaアプリケーションのコードを貼り付けています。

metadata.xml

<EntityType Name="Project">
    <Key>
        <PropertyRef Name="id"/>
    </Key>
    <Property Name="id" Type="Edm.Int32"/>
    <Property Name="name_artifact_id" Type="Edm.String"/>
    <Property Name="groupid" Type="Edm.String"/>
    <Property Name="project_display_name" Type="Edm.String"/>

    <NavigationProperty Name="projectConfigs"
                        Type="Collection(devplatform.config.ProjectConfig)"
                        Partner="project"/>
</EntityType>

<EntityType Name="ProjectConfig">
    <Key>
        <PropertyRef Name="id"/>
    </Key>
    <Property Name="id" Type="Edm.Int32"/>

    <NavigationProperty Name="project"
                        Type="devplatform.config.Project"
                        Partner="projectConfigs"/>
</EntityType>

<EntitySet Name="Projects" EntityType="devplatform.config.Project">
    <NavigationPropertyBinding Path="ProjectConfigs" Target="ProjectConfigs"/>
</EntitySet>

<EntitySet Name="ProjectConfigs" EntityType="devplatform.config.ProjectConfig">
    <NavigationPropertyBinding Path="Projects" Target="Projects"/>
</EntitySet>

DemoEdmProvider.java

public static void main(String[] args) {
public static final String ET_PROJECT_NAME = "Project";
public static final FullQualifiedName ET_PROJECT_FQN = 
        new FullQualifiedName(NAMESPACE, ET_PROJECT_NAME);

public static final String ET_PROJECTCONFIG_NAME = "ProjectConfig";
public static final FullQualifiedName ET_PROJECTCONFIG_FQN = 
        new FullQualifiedName(NAMESPACE, ET_PROJECTCONFIG_NAME);

public static final String ES_PROJECTS_NAME = "Projects";
public static final String ES_PROJECTCONFIGS_NAME = "ProjectConfigs";

public static final String NAV_TO_PROJECT = "Project";
public static final String NAV_TO_PROJECTCONFIG = "ProjectConfig";


if (entityTypeName.equals(ET_PROJECT_FQN)) {
    List<CsdlProperty> propertyList = new ArrayList<CsdlProperty>();
    // create EntityType properties
    CsdlProperty id = 
            new CsdlProperty().setName("id")
                              .setType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName());
    propertyList.add(id);
    CsdlProperty name_artifact_id = 
            new CsdlProperty().setName("name_artifact_id")
                              .setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
    propertyList.add(name_artifact_id);
    CsdlProperty groupid = 
            new CsdlProperty().setName("groupid")
                              .setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
    propertyList.add(groupid);
    CsdlProperty project_display_name = 
            new CsdlProperty().setName("project_display_name")
                              .setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
    propertyList.add(project_display_name);


    // create PropertyRef for Key element
    CsdlPropertyRef propertyRef = new CsdlPropertyRef();
    propertyRef.setName("id");

    // navigation property: many-to-one, null not allowed (product must have a category)
    List<CsdlNavigationProperty> navPropList = new ArrayList<CsdlNavigationProperty>();

    CsdlNavigationProperty projectconfigs = 
            new CsdlNavigationProperty().setName(NAV_TO_PROJECTCONFIGS)
                                        .setType(ET_PROJECTCONFIG_FQN)
                                        .setCollection(true)
                                        .setPartner("projectConfigs");
    navPropList.add(projectconfigs);


    // configure EntityType
    entityType = new CsdlEntityType();
    entityType.setName(ET_PROJECT_NAME);
    entityType.setProperties(propertyList);
    entityType.setKey(Arrays.asList(propertyRef));
    entityType.setNavigationProperties(navPropList);
}

if (entityTypeName.equals(ET_PROJECTCONFIG_FQN)) {
    List<CsdlProperty> propertyList = new ArrayList<CsdlProperty>();
    // create EntityType properties
    CsdlProperty id = 
            new CsdlProperty().setName("id")
                              .setType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName());
    propertyList.add(id);

    // create PropertyRef for Key element
    CsdlPropertyRef propertyRef = new CsdlPropertyRef();
    propertyRef.setName("id");

    // navigation property: many-to-one, null not allowed (product must have a category)
    List<CsdlNavigationProperty> navPropList = new ArrayList<CsdlNavigationProperty>();

    // ERROR CAUSING LINE
    CsdlNavigationProperty project = 
            new CsdlNavigationProperty().setName(NAV_TO_PROJECT)
                                        .setType(ET_PROJECT_FQN)
                                        .setNullable(true)
                                        .setPartner("project");
    navPropList.add(project);

    // configure EntityType
    entityType = new CsdlEntityType();
    entityType.setName(ET_PROJECTCONFIG_NAME);
    entityType.setProperties(propertyList);
    entityType.setKey(Arrays.asList(propertyRef));
    entityType.setNavigationProperties(navPropList);
}

必要であれば、私は不足している詳細情報を提供することができます!:)応答を取得できませんでした!私の質問は、小さなコミュニティに関連している場合は、わかりません!

ユージンEvdokimov:

私は、問題の根はNavigationProperty名とNavigationPropertyBindingパスのために使用される文字の異なる場合であると思います。すべてのプロパティ名用アッパーキャメルケースを使用することを検討してください。

パス使用における別の問題もあるProjectsエンティティセットの結合ナビゲーションプロパティの(複数での)ProjectConfigsのナビゲーションプロパティ命名しながらProjectConfigとしてproject(単数形では)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=312295&siteId=1