首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将EntityReference转换为实体

将EntityReference转换为实体
EN

Stack Overflow用户
提问于 2013-03-08 01:18:32
回答 3查看 29.5K关注 0票数 13

有谁知道如何将EntityReference转换为实体。

代码语言:javascript
复制
protected override void Execute(CodeActivityContext executionContext)
{
    [Input("Email")]
    [ReferenceTarget("email")]
    public InArgument<Entity> EMail { get; set; }


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

这给了我一个错误。无法对其进行转换。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-08 02:45:42

对您的问题的最简短的回答是在数据库中查询实体引用所指出(引用)的实体。我一直认为实体引用(粗略地)等同于C++中的指针。它有指向它的地址(guid),但您需要取消对它的引用才能访问到蜜糖。你可以这样做。

代码语言:javascript
复制
IOrganizationService organization = ...;
EntityReference reference = ...;

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

当我执行大量从EntityReference到Entity的转换时,我使用字段的可选参数部署扩展方法。

代码语言:javascript
复制
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));
}

你可以阅读更多并比较EntityReferenceEntity

票数 22
EN

Stack Overflow用户

发布于 2013-03-08 01:50:21

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

下面是一个扩展方法,它可以为您执行此操作:

代码语言:javascript
复制
public static Entity GetEntity(this EntityReference e)
{
    return new Entity(e.LogicalName) { Id = e.Id };
}

不要忘记,实体的任何其他属性都不会被填充。如果你想要这些属性,你需要查询它们:

代码语言:javascript
复制
public static Entity GetEntity(this IOrganizationService service, EntityReference e)
{
    return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(true));
}

如果你喜欢@Konrad的Field answer,把它变成一个params数组,调用它会更好

代码语言:javascript
复制
public static Entity GetEntity(this IOrganizationService service, EntityReference e, 
   params String[] fields)
{
    return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(fields));
}
票数 14
EN

Stack Overflow用户

发布于 2013-03-08 01:51:41

Entity和EntityReference不同。EntityReference是对包含实体的GUID和逻辑名称的记录的引用。您必须让实体通过guid和逻辑名称进行访问。大概是这样的:

代码语言:javascript
复制
service.Retrieve(logicalname, guid, new ColumnSet(columns));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15277597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档