c# - 一次检索多个实体的实体请求?

标签 c# dynamics-crm

我正在使用 RetrieveEntityRequest 获取实体属性的元数据:

RetrieveEntityRequest entityRequest = new RetrieveEntityRequest
{
    EntityFilters = EntityFilters.Attributes,
    LogicalName = joinedEntityName.Value,
};

RetrieveEntityResponse joinedEntityMetadata = (RetrieveEntityResponse)_service.Execute(entityRequest);

现在,假设我需要为多个实体执行此请求。是否可以在一次执行中执行此操作(可能不使用 RetrieveEntityRequest),而不是针对每个实体发出一个请求?

最佳答案

您不能使用 RetrieveEntityRequest 来做到这一点。但是,您可以执行 RetrieveMetadataChangesRequest得到你想要的。它的命名具有误导性,但如果您不提供 ClientVersionStamp 属性,它只会检索您在 Query 属性中指定的所有内容。

这是一个简单的示例,您将检索帐户和联系人的元数据,并且仅检索 LogicalNameDisplayName 属性:

var customFilterExpression = new[]
{
    new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, "account"),
    new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, "contact")
};
var customFilter = new MetadataFilterExpression(LogicalOperator.Or);
customFilter.Conditions.AddRange(customFilterExpression);

var entityProperties = new MetadataPropertiesExpression
{
    AllProperties = false
};
entityProperties.PropertyNames.AddRange("LogicalName", "DisplayName");

var request = new RetrieveMetadataChangesRequest
{
    Query = new EntityQueryExpression
    {
        Properties = entityProperties,
        Criteria = customFilter,
    }
};

这种方法还有一个好处,就是只检索你需要的特定属性,这使得请求更快,负载更小。它专为移动设备而设计,您只想检索所需的元数据,以及自上次检索以来发生的变化,但它在很多情况下都能很好地工作。

关于c# - 一次检索多个实体的实体请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979937/

相关文章:

c# - 当图片框位于另一个图像上方时如何使它透明

c# - NHibernate - 通过不同的键多个 JOIN 到同一个表

azure - 使用动态 IP 地址访问 Azure SQL 数据库

javascript - 在 CRM 2011 中从 JavaScript 执行工作流

dynamics-crm-2011 - CRM 2011 HTML Web 资源在 IE11 中不起作用

dynamics-crm - 当 Dynamics CRM 异步维护作业运行时,Alter Index 命令发生死锁

c# - 'string.Join(string, string[])' 的最佳重载方法匹配有一些无效参数

c# - 监控 C# 方法性能的工具

javascript - CRM 2011 JScript retrieveMultiple 抛出错误请求错误

c# - 如何将 dbcontext/工作单元发送到 Hangfire 作业过滤器