Chr*_*ner 7 linq dynamics-crm-2011
我正在使用crmsvcutil生成早期绑定类型.在crm 4.0天中,只需点击entity.ChildEntities属性即可加载相关的entites.
//Winvs.Next.Entities.CrmDataContext dc = new Entities.CrmDataContext(new Microsoft.Xrm.Sdk.Client.OrganizationServiceContext(
var cred = new System.ServiceModel.Description.ClientCredentials();
cred.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
//
using (var organizationServiceProxy = new Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy(new Uri(System.Configuration.ConfigurationManager.ConnectionStrings["CrmConnection"].ConnectionString), null, cred, null))
using (Winvs.Next.Entities.CrmDataContext dc = new Entities.CrmDataContext(organizationServiceProxy))
{
// This statement is required to enable early-bound type support.
organizationServiceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new Microsoft.Xrm.Sdk.Client.ProxyTypesBehavior());
//
foreach (var a in dc.AccountSet)
{
foreach (var c in a.contact_customer_accounts)
{
c.FullName.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用最新的CRM 2011 SDK版本执行此操作而不是加载已实现的实体时,我得到一个NullReferenceException,它没有提供有关该问题的进一步信息.
foreach (var c in a.contact_customer_accounts)
Run Code Online (Sandbox Code Playgroud)
我想念什么?如何使用CRM2011 Linq加载相关实体?
CBo*_*ono 10
我和你有完全相同的问题.我看到了这些属性,并为他们总是回来的原因感到困惑null.它们显然旨在检索特定关系的实体,但它们似乎"处于休眠状态".
在我看来,可能没有正确配置上下文对象以延迟加载这些"导航"属性(从实体框架借用一个术语).所以我开始研究我能做什么OrganizationServiceContext,并发现了一下它的LoadProperty方法:
如果属性表示关联,链接或延迟属性,则调用此方法可为客户端提供延迟加载相关资源的方法.
这听起来像我需要的,其中一个重载需要一个Entity和一个Relationship输入.因此,一旦您拥有一个具有一个或多个关系的实体实例,您就需要请求上下文加载相应的属性.请记住,实体必须自动附加到上下文(因为您通过上下文查询检索实体),或手动使用该Attach方法.
我对你的代码感到有点困惑,因为你使用的是CrmDataContext对象而不是OrganizationServiceContext对象.2011 SDK中的代码示例使用后者,crmsvcutil甚至会生成OrganizationServiceContext"[ENTITY_NAME] Set"形式的方法的自定义实例(即AccountSet在您的示例中).您可能需要切换到较新的上下文类型.
因此,使用您的示例并假设dc现在是一个实例OrganizationServiceContext,它看起来像:
Relationship contactRel = new Relationship("contact_customer_accounts");
foreach (var a in dc.AccountSet) {
dc.LoadProperty(a, contactRel); // Tell context to load entities from this relationship
foreach (var c in a.contact_customer_accounts) {
c.FullName.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
手动加载每个关系是一件痛苦的事,但我找不到其他激活这些属性的方法.
注意:要使crmsvcutil生成自定义OrganizationServiceContext,请指定 serviceContextName开关:
crmsvcutil.exe /url:<your_crm_url> /out:Xrm.cs /serviceContextName:XrmServiceContext
Run Code Online (Sandbox Code Playgroud)
这将创建一个以组件XrmServiceContext中所有不同实体类型的访问器命名的派生类.
我真的不知道为什么会这样,但经过一些研究会议后发现,必须使用 xrm 提供的代码自定义程序集来生成实体对象模型类。
提供了一个 SDK 版本 5.0.4 示例,它构建了一个示例控制台,展示了如何以我们在 CRM 4.0 xrm 时代使用的方式生成和使用实体类。
长话短说,我在此处发布了 crmsvcutil 调用,有关详细信息,您应该查阅 sdk 示例演练:使用开发人员扩展构建连接到 Microsoft Dynamics CRM 2011 的控制台应用程序http://technet.microsoft.com/en-我们/图书馆/gg695803.aspx
CrmSvcUtil.exe /codeCustomization:"Microsoft.Xrm.Client.CodeGeneration.CodeCustomization, Microsoft.Xrm.Client.CodeGeneration" /out:Xrm\Xrm.cs /url:http://Crm/Contoso/XRMServices/2011/Organization.svc /domain:CONTOSO /username:administrator /password:pass@word1 /namespace:Xrm /serviceContextName:XrmServiceContext
Run Code Online (Sandbox Code Playgroud)