それはちょうど私の問題を解決するかどうか(あなたが詳細な標準的な解決策を持っていない場合)*私は恵みと答えを受け入れます*
私は、ブラウザからのメタデータにアクセスしようとすると(の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);
}
必要であれば、私は不足している詳細情報を提供することができます!:)応答を取得できませんでした!私の質問は、小さなコミュニティに関連している場合は、わかりません!
私は、問題の根はNavigationProperty名とNavigationPropertyBindingパスのために使用される文字の異なる場合であると思います。すべてのプロパティ名用アッパーキャメルケースを使用することを検討してください。
パス使用における別の問題もあるProjects
エンティティセットの結合ナビゲーションプロパティの(複数での)ProjectConfigs
のナビゲーションプロパティ命名しながらProjectConfig
としてproject
(単数形では)。