2011-01-19 12 views
1

MetadataServiceを使用して4つのエンティティを作成し、それらの間にリレーションシップを作成しています。エンティティのN:1リレーションシップを複数作成するとエラーが発生する

エンティティは以下のとおりです。TrexCalendarTrexFromTrexToTrexAddress

関係(全て1:多くは)あり:TrexFrom - TrexAddressTrexCalendar - TrexFromTrexTo - TrexAddressTrexCalendar - TrexTo

私は私のコードを実行すると、エンティティがすべて作成されます第1、第2、第4の関係が正常に作成されます。

第三の関係は、以下の詳細で失敗作成:

0x80047007エンティティ: 7a6af338-BC23-E011-ad8c-9f5d300a22fe:new_trexaddressはIDを持つエンティティに親です。エンティティと別の親の 関係を作成できません:new_trextoプラットフォームを

7a6af338-BC23-E011-ad8c-9f5d300a22feはTrexFromエンティティのIDです。 1理由TrexToTrexAddress間のN関係:

は、だから、私は1を作成することはできませんSDKのように見えるNの関係はTrexFromTrexAddressの間に存在します。奇妙な何

は、私はダイナミクスWebインタフェースを使用して手動でこの関係を作成することができるだということです。

何が起こっている可能性がありますか?プログラムで両方の関係を作成するにはどうすればよいですか?

私は関係を作成するには、次のコードを使用しています:両方の関係が「親」として設定されている

OneToManyMetadata relationship = new OneToManyMetadata 
{ 
    ReferencedEntity = "new_trexto", 
    ReferencingEntity = "new_trexaddress" 
    SchemaName = "new_trexto_trexaddress", 
    AssociatedMenuBehavior = new CrmAssociatedMenuBehavior { Value = AssociatedMenuBehavior.UseCollectionName }, 
    CascadeAssign = new CrmCascadeType { Value = CascadeType.NoCascade }, 
    CascadeDelete = new CrmCascadeType { Value = CascadeType.RemoveLink }, 
    CascadeMerge = new CrmCascadeType { Value = CascadeType.NoCascade }, 
    CascadeReparent = new CrmCascadeType { Value = CascadeType.NoCascade }, 
    CascadeShare = new CrmCascadeType { Value = CascadeType.UserOwned }, 
    CascadeUnshare = new CrmCascadeType { Value = CascadeType.NoCascade } 
}; 

LookupAttributeMetadata lookup = new LookupAttributeMetadata 
{ 
    SchemaName = lookupName, 
    RequiredLevel = new CrmAttributeRequiredLevel(AttributeRequiredLevel.Recommended), 
    DisplayName = CrmServiceUtility.CreateSingleLabel("TrexTo - TrexAddress", 1033) 
}; 

CreateOneToManyRequest request = new CreateOneToManyRequest 
{ 
    OneToManyRelationship = relationship, 
    Lookup = lookup 
}; 

try 
{ 
    metadataService.Execute(request); 
    Debug.Print("Relationship created successfully"); 
} 
catch (System.Web.Services.Protocols.SoapException ex) 
{ 
    Debug.Print(ex.Detail.InnerText); 
} 
+0

としてそれらのいずれかを設定する必要があります私は、カスケード値のいずれかを設定するコード行を省略することで、これを動作させることができました。 – dlarkin77

答えて

4

場合は、おそらく「参照」

+0

こんにちはマイク。提案していただきありがとうございます。関係はデフォルトでペアレンタルとして作成されますか?私はどのように参照関係としてそれらの1つを設定するつもりですか?コードスニペットを含めるように質問を編集しました。私は何か完全に間違っているのですか? – dlarkin77

+0

MSからの例では、すべてのカスケードオプションをペアレンタル用に「カスケード」に設定すると言います。参照のために、Assign、Share、Unshare、およびReparentに対してCascade Noneを設定してみてください。 「削除のためのカスケード - リンクの削除」、「すべてのカスケードの結合」を設定します。 http://msdn.microsoft.com/en-us/library/cc156290.aspx –

関連する問題