转换的EntityReference到实体(Convert EntityReference to E

2019-08-17 09:11发布

有谁知道如何可以转换的EntityReference到实体。

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


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

这给我一个错误。 无法转换此。

Answer 1:

最简单的回答你的问题是要在数据库中查询由实体引用多数民众赞成指出了实体(简称)。 我一直认为实体引用的(粗)等价于C ++中的指针。 它有地址给它(GUID),但你需要为了得到对蜂蜜去引用它。 你是这样做的。

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

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

当我做了很多的EntityReference转换为实体的,我部署以田野可选参数的扩展方法。

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和实体 。



Answer 2:

一个EntityReference只是logicalName,名称和实体的ID。 因此,要获得一个Entity ,你只需要创建一个使用的属性的实体EntityReference

这里是执行你的一个扩展方法:

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

不要忘了,没有实体的其他属性将被填充。 如果你想要的属性,您需要查询它们:

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

如果你喜欢@康拉德的现场回答,使它成为一个参数数组,它是更好的调用

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


Answer 3:

实体的EntityReference是不同的。 所述的EntityReference是其中包含GUID和实体的逻辑名的记录的引用。 你必须打通GUID和逻辑名称访问的实体。 类似的东西:

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


文章来源: Convert EntityReference to Entity