0

CRM 4.0 では、リポジトリに汎用メソッドがありました。

public T GetEntityById(Guid id)
{
    var entities =
        from e in m_context.GetEntities(typeof (T).Name)
        where e.GetPropertyValue<Guid>(IdentityFieldName) == id
        select e;
    return (T) entities.FirstOrDefault();
}

しかし、CRM 2011 はどうでしょうか。ICrmEntityGetPropertyValue メソッドがありません...

IDでジェネリックエンティティを取得する代替手段は何ですか?

4

3 に答える 3

0

キャストするのではなく、ToEntity メソッドを使用する必要があります。typeof(T).Name には大文字と小文字の違いがある場合があるため、ヘルパー関数も書きました。

/// <summary>
/// Retrieves the Entity of the given type with the given Id, with the given columns
/// </summary>
/// <typeparam name="T">An early bound Entity Type</typeparam>
/// <param name="service">open IOrganizationService</param>
/// <param name="id">Primary Key of Entity</param>
/// <param name="columnSet">Columns to retrieve</param>
/// <returns></returns>
public static T GetEntity<T>(this IOrganizationService service, Guid id, ColumnSet columnSet)
    where T : Entity
{
    return service.Retrieve(EntityHelper.GetEntityLogicalName<T>(), id, columnSet).ToEntity<T>()
}

public static string GetEntityLogicalName<T>() where T : Entity
{
    return GetEntityLogicalName(typeof(T));
}

public static string GetEntityLogicalName(Type type)
{
    var field = type.GetField("EntityLogicalName");
    if (field == null)
    {
        if (type == typeof(Entity))
        {
            return "entity";
        }
        else
        {
            throw new Exception("Type " + type.FullName + " does not contain an EntityLogicalName Field");
        }
    }
    return (string)field.GetValue(null);
}
于 2014-05-14T12:42:54.313 に答える
0

のようなもの(T) m_context.Retrieve(typeof (T).Name, id, new ColumnSet())
こちらをご覧ください

于 2013-04-05T11:06:40.293 に答える