使用LINQ示例更新CRM 2011记录

时间:2011-06-22 15:24:56

标签: linq dynamics-crm-2011

有人可以使用linq发布已确认的示例,以检索和更新CRM Dynamics 2011中的记录。

微软声称这是“不受支持的”,但我怀疑这是可能的。

2 个答案:

答案 0 :(得分:3)

我使用“早期绑定”方法,您可以使用CrmSvcUtil.exe工具生成C#实体类,但请确保使用您在各种示例中找到的/codecustomization开关。您需要最新版本的CRM 2011 SDK,并且必须从CrmSvcUtil.exe文件夹中运行\bin(不要使用随CRM安装的版本)。

您的项目需要引用Microsoft.Xrm.ClientMicrosoft.Xrm.SdkMicrosoft.Crm.Sdk.Proxy以及.Net框架中的其他一些内容(查看构建错误以查看您缺少的内容,然后添加它们直到它构建)。

这是一个基本的代码片段,用于检索Contact实体,更新其中一个字段,然后将其保存回CRM:

CrmDataContext dc = new CrmDataContext("Xrm");

Contact contact = (from c in dc.ContactSet
                   where ...whatever...
                   select c).FirstOrDefault();

contact.FirstName = "Jo";

dc.SaveChanges();

(请注意CrmDataContext是我的数据上下文的名称。您可以使用CrmSvcUtil命令行开关之一设置此名称。

您还需要在web.config中添加一些内容:

<configSections>
   <section name="microsoft.xrm.client" type="Microsoft.Xrm.Client.Configuration.CrmSection, Microsoft.Xrm.Client" />
</configSections>

<connectionStrings>
  <add name="Xrm" connectionString="Server=http://<your crm url>; Domain=<your domain>; Username=<a crm user id>; Password=<their password>" />
</connectionStrings>

<microsoft.xrm.client>
   <contexts>
      <add name="Xrm" type="" />
   </contexts>
</microsoft.xrm.client>

这假设您在公司网络上运行CRM,因此连接字符串中指定的帐户和域将是一个AD帐户,该帐户被设置为具有检索和更新实体的相关权限的CRM用户。

答案 1 :(得分:0)

这是使用连接到在线提供商的ODATA提供商的粗略示例

             var serverConfig = GetServerConfig(sessionKey);
            // Connect to the Organization service. 
            // The using statement ensures that the service proxy will be properly disposed.

            using (var serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials))
            {
                // This statement is required to enable early-bound type support.
                serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());

                using (var orgContext = new CrmServiceContext(serviceProxy))
                {
                    return orgContext.AccountSet.Where(item => item.Id == id).Select().Single();
                }
            }

SDK中还有一个很好的例子:

CRM2011Sdk \ SDK \ samplecode \ CS \ wsdlbasedproxies \在线