public static class EFExtension
{
/// <summary>
/// Retorna el valor de una propiedad generada en la extensión del Diseñador del Entity Framework
/// </summary>
/// <typeparam name="T">Entidad para obtener la propiedad</typeparam>
/// <param name="workspace"></param>
/// <param name="propertyName">Ejemplo: http://schemas.vemn.com/EFExtensions:AuditarProperty</param>
/// <returns></returns>
public static bool GetExtentionPropertyAsBoolean<T>(this MetadataWorkspace workspace, string propertyName)
{
return (GetExtentionPropertyInternal<T>(workspace,propertyName).ToString().ToLower() == "true") ;
}
/// <summary>
/// Retorna el valor de una propiedad generada en la extensión del Diseñador del Entity Framework
/// </summary>
/// <typeparam name="T">Entidad para obtener la propiedad</typeparam>
/// <param name="workspace"></param>
/// <param name="propertyName">Ejemplo: http://schemas.vemn.com/EFExtensions:AuditarProperty</param>
/// <returns></returns>
public static string GetExtentionPropertyAsString<T>(this MetadataWorkspace workspace, string propertyName)
{
return GetExtentionPropertyInternal<T>(workspace, propertyName).ToString();
}
/// <summary>
/// Retorna el valor de una propiedad generada en la extensión del Diseñador del Entity Framework
/// </summary>
/// <typeparam name="T">Entidad para obtener la propiedad</typeparam>
/// <param name="workspace"></param>
/// <param name="propertyName">Ejemplo: http://schemas.vemn.com/EFExtensions:AuditarProperty</param>
/// <returns></returns>
public static int GetExtentionPropertyAsInt<T>(this MetadataWorkspace workspace, string propertyName)
{
return Convert.ToInt32(GetExtentionPropertyInternal<T>(workspace, propertyName));
}
/// <summary>
/// Retorna el valor de una propiedad generada en la extensión del Diseñador del Entity Framework
/// </summary>
/// <typeparam name="T">Entidad para obtener la propiedad</typeparam>
/// <param name="workspace"></param>
/// <param name="propertyName">Ejemplo: http://schemas.vemn.com/EFExtensions:AuditarProperty</param>
/// <returns></returns>
public static object GetExtentionPropertyAsObject<T>(this MetadataWorkspace workspace, string propertyName)
{
return GetExtentionPropertyInternal<T>(workspace, propertyName);
}
/// <summary>
/// Retorna el valor de una propiedad generada en la extensión del Diseñador del Entity Framework
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="workspace"></param>
/// <param name="propertyName">Ejemplo: http://schemas.vemn.com/EFExtensions:AuditarProperty</param>
/// <returns></returns>
private static object GetExtentionPropertyInternal<T>(MetadataWorkspace workspace, string propertyName)
{
StructuralType objectSpaceType;
workspace.LoadFromAssembly(typeof(T).Assembly);
if (!workspace.TryGetItem<StructuralType>(typeof(T).FullName, DataSpace.OSpace, out objectSpaceType))
{
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "No se puede encontrar este tipo de datos en la Metadata", typeof(T)));
}
StructuralType edmType = workspace.GetEdmSpaceType(objectSpaceType);
MetadataProperty mp = edmType.MetadataProperties.Where(x => x.Name == propertyName).Single();
XElement xc = (XElement)mp.Value;
return xc.Value;
}
}