使用配置文件配置上下文 (Dynamics CRM 2015)

 

发布日期: 2016年11月

适用于: Dynamics CRM 2015

当使用 Microsoft Dynamics CRM 2015 开发人员扩展而不是以编程方式调整依赖关系组合时,可以通过修改应用程序配置文件来影响默认对象类型。 最低配置只提供连接字符串和数据上下文。 在后台创建默认依赖关系对象就像在编程案例中一样。

本主题内容

概述

配置规则

指定 instanceMode 属性

默认配置

概述

以下显示默认配置文件的一部分:

<configuration>

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

 <connectionStrings>
  <add name="Xrm" connectionString="Url=http://crm.contoso.com/xrmContoso"/>
 </connectionStrings>

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

</configuration>

CrmConfigurationManager 用于将配置显示为实际代码。CreateContext 方法采用应用于实例化数据上下文的上下文配置元素的名称。

var contextName = "Xrm";
using (var context = CrmConfigurationManager.CreateContext(contextName) as XrmServiceContext)
{
}

传递 null 会采用默认上下文配置元素,其是集合中的第一个元素。 此外,可以使用显式默认元素替代此元素。 以下代码获取与前面示例中所示相同的结果。

using (var context = CrmConfigurationManager.CreateContext() as XrmServiceContext)
{
}

上下文配置元素负责指定连接字符串,默认情况下,它会寻找与上下文配置元素名称相同的连接字符串名称。 以上示例在名称 "Xrm" 上匹配。 如下所示,可以显式指定连接字符串名称以突出显示并隔离此关系。

<connectionStrings>
 <add name="MyCRM" connectionString="Url=http://crm.contoso.com/xrmContoso"/>
</connectionStrings>

<microsoft.xrm.client>
 <contexts>
  <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" connectionStringName="MyCRM"/>
 </contexts>
</microsoft.xrm.client>

可以指定嵌套依赖项并将其链接在一起,如此示例所示:

<microsoft.xrm.client>
 <contexts>
  <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" serviceName="MyService"/>
 </contexts>
 <services>
  <add name="MyService" type="Microsoft.Xrm.Client.Services.CachedOrganizationService, Microsoft.Xrm.Client" serviceCacheName="MyServiceCache"/>
 </services>
 <serviceCache>
  <add name="MyServiceCache" type="Microsoft.Xrm.Client.Services.OrganizationServiceCache, Microsoft.Xrm.Client" objectCacheName="MyObjectCache"/>
 </serviceCache>
 <objectCache>
  <add name="MyObjectCache" type="System.Runtime.Caching.MemoryCache, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
 </objectCache>
</microsoft.xrm.client>

下面显示如何禁用缓存:

<microsoft.xrm.client>
  <contexts>
   <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" serviceName="Xrm"/>
  </contexts>
  <services>
   <add name="Xrm" type="Microsoft.Xrm.Client.Services.OrganizationService, Microsoft.Xrm.Client"/>
  </services>
</microsoft.xrm.client>

配置规则

下面列出了用于配置上下文的规则。

  • 指定 <context> 元素 - 默认类型类对于 OrganizationServiceContext 依赖项不存在,因此需要指定 <context/> 元素,除非您只使用动态 CrmOrganizationServiceContext 且不生成代码。

  • 可以选择指定依赖项名称 - 默认依赖项名称属性(如 name="Xrm")是可选的。 省略时,配置集合下的第一个 <add/> 元素是默认值。

  • 指定链接属性 – 通常指定 serviceName="Xrm"、serviceCacheName="Xrm" 和 objectCacheName="Xrm" 等链接属性。 但是,省略链接属性时,CrmConfigurationManager 会尝试链接到与父依赖项同名的子依赖项。

任何来自配置的依赖项都可以使用 CrmConfigurationManager 以及适当的静态方法进行实例化。 所生成的对象可转换为已知类型或作为未转换的基本类型引用。

var name = "Xrm";
var connection = new CrmConnection(name);
var objectCache = CrmConfigurationManager.CreateObjectCache(name) as MemoryCache;
var serviceCache = CrmConfigurationManager.CreateServiceCache(name, connection) as OrganizationServiceCache;
var service = CrmConfigurationManager.CreateService(connection, name) as CachedOrganizationService;
var context = CrmConfigurationManager.CreateContext(name) as XrmServiceContext;

指定 instanceMode 属性

如果配置元素指定了 InstanceMode 属性,CrmConfigurationManager 将相应地调整其实例化行为。

  • 静态 – 始终返回同一静态实例。

  • PerName– 为每个指定的配置元素返回单个实例。

  • PerRequest – 返回 Web 请求上下文中的第一个相同实例, 例如,每个 HttpContext 实例一个实例。

  • PerInstance – 每次调用返回一个新的实例。

默认配置

具有默认值的完全配置:

<configuration>

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

 <connectionStrings>
  <add name="Xrm" connectionString="ServiceUri=...; Domain=...; Username=...; Password=..."/>
 </connectionStrings>

 <microsoft.xrm.client>
  <contexts default="Xrm">
   <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" connectionStringName="Xrm" serviceName="Xrm"/>
  </contexts>
  <services default="Xrm">
   <add
    name="Xrm"
    type="Microsoft.Xrm.Client.Services.CachedOrganizationService, Microsoft.Xrm.Client"
    serviceCacheName="Xrm"
    instanceMode="PerRequest" [Static | PerName | PerRequest | PerInstance]
   />
  </services>
  <serviceCache default="Xrm">
   <add
    name="Xrm"
    type="Microsoft.Xrm.Client.Services.OrganizationServiceCache, Microsoft.Xrm.Client"
    objectCacheName="Xrm"
    cacheMode="LookupAndInsert" [LookupAndInsert | InsertOnly | Disabled]
    returnMode="Cloned" [Shared | Cloned]
    queryHashingEnabled="false" [false | true]
   />
  </serviceCache>
  <objectCache default="Xrm">
   <add
    name="Xrm"
    type="System.Runtime.Caching.MemoryCache, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    instanceMode="PerName" [Static | PerName | PerInstance]
    absoluteExpiration=""
    slidingExpiration="00:00:00" [HH:MM:SS]
    duration="00:00:00" [HH:MM:SS]
    priority="Default" [Default | NotRemovable]
    outputCacheProfileName="Xrm"
   />
  </objectCache>
 </microsoft.xrm.client>

 <system.runtime.caching>
  <memoryCache>
   <namedCaches>
    <add name="Xrm"
     cacheMemoryLimitMegabytes="0"
     physicalMemoryLimitPercentage="0"
     pollingInterval="00:00:00" />
    </namedCaches>
   </memoryCache>
 </system.runtime.caching>

 <system.web>
  <caching>
   <outputCacheSettings>
    <outputCacheProfiles>
     <add name="Xrm" enabled="true" duration="-1"/>
    </outputCacheProfiles>
   </outputCacheSettings>
  </caching>
 </system.web>

</configuration>

另请参阅

开发人员扩展上下文对象模型 (Dynamics CRM 2015)
访问实体关系 (Dynamics CRM 2015)
将实体附加到上下文 (Dynamics CRM 2015)

© 2017 Microsoft。 保留所有权利。 版权