发布日期: 2016年11月
适用于: Dynamics CRM 2015
Microsoft Dynamics CRM 2015 开发人员扩展提供了一组彼此相关的类,可最大程度地减少启动和运行所需的工作。 最基本的程序只需要连接字符串(或 app.config 中的连接字符串的名称)和 CrmSvcUtil.exe 创建的数据上下文,如以下示例所示:
var connection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var context = new XrmServiceContext(connection))
{
var accounts = context.AccountSet;
foreach (var account in accounts)
Console.WriteLine(account.Name);
}
在底层存在用于处理低级操作的嵌套对象。 数据上下文是所有这些对象的组合,因此,数据上下文的行为依赖于对象。 通过使用特定构造函数可以公开这些依赖项。 扩展时,默认对象组合类似于以下示例:
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
var myObjectCache = MemoryCache.Default;
var myServiceCache = new OrganizationServiceCache(myObjectCache, myConnection);
using (var myService = new CachedOrganizationService(myConnection, myServiceCache))
using (var myContext = new XrmServiceContext(myService))
{
}
依赖项
下表列出可用依赖项及其行为。
接口 |
基类 |
默认类型 |
说明 |
配置元素 |
|---|---|---|---|---|
CrmConnection |
CrmConnection |
连接字符串形式的连接详细信息。 |
<connectionStrings> |
|
ObjectCache |
MemoryCache |
独立于 SDK 的其他组件的原始数据缓存服务。 |
<objectCache> |
|
IOrganizationServiceCache |
OrganizationServiceCache |
OrganizationServiceCache |
缓存 IOrganizationService 操作结果的进一步提取的数据缓存服务。 自动设置缓存项依赖项,执行更新操作将使相关缓存项无效。 |
<serviceCache> |
IOrganizationService |
OrganizationService |
CachedOrganizationService |
围绕 IOrganizationService 的包装类,它管理有关设置 OrganizationServiceProxy 或其他任意 IOrganizationService 对象的详细信息。 在与 OrganizationServiceCache 对象成对使用时,会变为缓存服务。 |
<services> |
OrganizationServiceContext |
支持 OData 和 LINQ 的数据上下文。 需要专门进行声明或配置,使得不存在默认类型。 |
<contexts> |
||
IDiscoveryService |
DiscoveryService |
围绕 IDiscoveryService 的包装类,它管理有关设置 DiscoveryServiceProxy 或其他任意 IDiscoveryService 对象的详细信息。 用于此用途的缓存实现不存在,也不能在 app.config 中配置。 |
可以实现接口、继承可用基类或只是重新安排对象嵌套,以修改最终行为。 例如,禁用缓存功能的一种方法是忽略与缓存相关的对象并首选原始基类。
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}
若要删除对 CrmSvcUtil.exe 生成的代码的依赖性,而支持动态代码,请使用 CrmOrganizationServiceContext 类。 另一种方案是彻底忽略数据上下文,只是直接调用 IOrganizationService。 这也是调用 IDiscoveryService 的方法。
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myContext = new CrmOrganizationServiceContext(myConnection))
{
}
using (var myService = new OrganizationService(myConnection))
{
var response = myService.Execute(new WhoAmIRequest()));
}
var discoveryConnection = CrmConnection.Parse("Url=http://crm.contoso.com");
using (var myDiscoveryService = new DiscoveryService(discoveryConnection))
{
var response = myDiscoveryService.Execute(new RetrieveOrganizationsRequest()));
}
背景增强功能
CrmOrganizationServiceContext,即 XrmServiceContext 的直接基类和 Microsoft Dynamics 365 的开发人员扩展,和核心 SDK 中的基类 OrganizationServiceContext 之间的最显著差别在于对 IUpdatable 和 IExpandProvider 界面的执行。 此自定义实现允许生成的数据上下文和该数据上下文生成的实体对象参与 WCF 数据服务框架。 若要将数据上下文用作 OData 端点,请将一个新的 WCF 数据服务端点 (.svc) 添加到现有的 Web 应用程序中。
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>
这是可用于开发的服务端点隐藏代码 (.svc.cs) 示例。 指定 XrmServiceContext 作为 DataService<T> 类的泛型类型参数。
using System.Data.Services;
using System.Data.Services.Common;
using System.ServiceModel;
using Xrm;
namespace MySite
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyContext : DataService<XrmServiceContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Set rules to indicate which entity sets and service operations are visible, updatable, etc.
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
}
另请参阅
Microsoft Dynamics CRM 2015 开发人员扩展
使用配置文件配置上下文 (Dynamics CRM 2015)
访问实体关系 (Dynamics CRM 2015)
将实体附加到上下文 (Dynamics CRM 2015)
Dynamics CRM 2015 的门户演练
© 2017 Microsoft。 保留所有权利。 版权