Преобразование EntityReference в Entity

кто-нибудь знает, как преобразовать EntityReference в Entity.

protected override void Execute(CodeActivityContext executionContext)
{
    [Input("Email")]
    [ReferenceTarget("email")]
    public InArgument<Entity> EMail { get; set; }


    Entity MyEmail = EMail.Get<Entity>(executionContext);

Это дает мне ошибку. Не удается преобразовать это.

3 ответов


самый короткий ответ на ваши вопросы-запросить базу данных для сущности, на которую указывает (ссылается) ссылка на сущность. Я всегда рассматривал ссылки на сущности как (грубый) эквивалент указателей в C++. У него есть адрес к нему (guid), но вам нужно удалить его, чтобы добраться до меда. Вы делаете это, как это.

IOrganizationService organization = ...;
EntityReference reference = ...;

Entity entity = organization.Retrieve(reference.LogicalName, reference.Id, 
  new ColumnSet("field_1", "field_2", ..., "field_z"));

когда я делаю много преобразования из EntityReference to сущности, Я развертываю метод расширения с необязательным параметром для полей.

public static Entity ActualEntity(this EntityReference reference,
  IOrganizationService organization, String[] fields = null)
{
  if (fields == null)
    return organization.Retrieve(reference.LogicalName, reference.Id, 
      new ColumnSet(true));
  return organization.Retrieve(reference.LogicalName, reference.Id, 
    new ColumnSet(fields));
}

можно подробнее и сравним EntityReference и сущности.


An EntityReference - это просто логическое имя, имя и идентификатор объекта. Итак, чтобы получить Entity, вам просто нужно создать объект, используя свойства EntityReference.

вот метод расширения, который выполняет это для вас:

public static Entity GetEntity(this EntityReference e)
{
    return new Entity(e.LogicalName) { Id = e.Id };
}

не забывайте, что ни один из других атрибутов сущности не будет заполнен. Если вам нужны атрибуты, которые вам нужно запросить для них:

public static Entity GetEntity(this EntityReference e, IOrganizationService service)
{
    return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(true));
}

и если вам нравится полевой ответ @Konrad, сделайте его params массив и приятнее называть

public static Entity GetEntity(this EntityReference e, 
    IOrganizationService service, params String[] fields)
{
    return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(fields));
}

Entity и EntityReference разные. The EntityReference является ссылкой для записи, которая содержит идентификатор GUID и логическое имя сущности. Вы должны получить доступ к сущности через guid и логическое имя. Что-то вроде этого:--4-->

service.Retrieve(logicalname, guid, new ColumnSet(columns));