有谁知道如何将EntityReference转换为实体。
protected override void Execute(CodeActivityContext executionContext)
{
[Input("Email")]
[ReferenceTarget("email")]
public InArgument<Entity> EMail { get; set; }
Entity MyEmail = EMail.Get<Entity>(executionContext);这给了我一个错误。无法对其进行转换。
发布于 2013-03-08 02:45:42
对您的问题的最简短的回答是在数据库中查询实体引用所指出(引用)的实体。我一直认为实体引用(粗略地)等同于C++中的指针。它有指向它的地址(guid),但您需要取消对它的引用才能访问到蜜糖。你可以这样做。
IOrganizationService organization = ...;
EntityReference reference = ...;
Entity entity = organization.Retrieve(reference.LogicalName, reference.Id,
new ColumnSet("field_1", "field_2", ..., "field_z"));当我执行大量从EntityReference到Entity的转换时,我使用字段的可选参数部署扩展方法。
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和Entity。
发布于 2013-03-08 01:50:21
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));
}如果你喜欢@Konrad的Field answer,把它变成一个params数组,调用它会更好
public static Entity GetEntity(this IOrganizationService service, EntityReference e,
params String[] fields)
{
return service.Retrieve(e.LogicalName, e.Id, new ColumnSet(fields));
}发布于 2013-03-08 01:51:41
Entity和EntityReference不同。EntityReference是对包含实体的GUID和逻辑名称的记录的引用。您必须让实体通过guid和逻辑名称进行访问。大概是这样的:
service.Retrieve(logicalname, guid, new ColumnSet(columns));https://stackoverflow.com/questions/15277597
复制相似问题