Entity Framework - Proveedor de almacenamiento de tablas de Azure - Enum Support

azure-table-storage entity-framework-core

Pregunta

De hecho, estoy usando el proveedor de la tabla de almacenamiento de Azure para EF ( EntityFramework.AzureTableStorage 7.0.0-beta1 ).

He terminado cómo configurar el DbContext:

public class Subscription
{
    public string Environment { get; set; }

    public string Name { get; set; }

    ...
    ...            
}

public class EF7Context : DbContext
{
    public DbSet<Subscription> Subscriptions { get; set; }

    protected override void OnConfiguring(DbContextOptions options)
    {
        options.UseAzureTableStorage("MyconnectionString");
    }

    protected override void OnModelCreating(Microsoft.Data.Entity.Metadata.ModelBuilder modelBuilder)
    {
        // Configure the Azure Table Storage
        modelBuilder.Entity<Subscription>()
            .ForAzureTableStorage() // Data are stored in an Azure Table Storage.
            .Table("SubscriptionDev") // Name of the Table in the Azure Storage Account
            .PartitionAndRowKey(s => s.Environment, s => s.Name); // Map the partition and the row key
    }
}

Pero ahora me gustaría agregar una enumeración como parte del modelo de Subscription . He encontrado una solución para hacer esto:

Tengo una enumeración:

public enum QueuePriority
{
    High,
    Low
}

He añadido estas propiedades a la clase de Subscription :

public int PriorityId { get; set; }

public QueuePriority Priority
{
    get { return (QueuePriority)PriorityId; }
    set { PriorityId = (int)value; }
}

Y declare la propiedad Priority como sombra en la configuración de EF para que no tenga el ID de Prioridad y la Prioridad almacenados en la Tabla de Azure:

protected override void OnModelCreating(Microsoft.Data.Entity.Metadata.ModelBuilder modelBuilder)
{   
    ...

    // We are not mapping the Enum in the database only the IDs.
    modelBuilder.Entity<Subscription>().Property(s => s.Priority).Shadow();
}

Así que me pregunto si hay una mejor manera de lograr esto y / o ¿Si las próximas versiones de EF.AzureTableStorage van a ser compatibles con Enum?

Gracias

Respuesta aceptada

EF Azure Table Storage beta1 fue un prototipo que se ha descontinuado por el momento. Consulte también https://stackoverflow.com/a/35071077/2526265


Respuesta popular

La versión del SDK de Azure Table Storage> 8.0.0 ya es compatible con enumeraciones y muchos otros tipos de propiedades simples y complejas, por lo que realmente no necesita usar un marco adicional solo para ese propósito.

Simplemente puede aplanar su objeto POCO usando el método TableEntity.Flatten: https://msdn.microsoft.com/en-us/library/azure/mt775435.aspx

Escribe el diccionario aplanado en la mesa de almacenamiento. Cuando lea, simplemente pase el diccionario de EntityProperties al método TableEntity.ConvertBack : https://msdn.microsoft.com/en-us/library/azure/mt775435.aspx

y recompondrá su objeto original, incluido su Enum y otros tipos de propiedades.

Sus clases de entidad no necesitan heredar de la clase TableEntity o implementar la interfaz ITableEntity , pueden ser solo objetos POCO con propiedades simples O pueden tener propiedades complejas anidadas propias con muchas capas de gráficos de objetos. ConvertBack métodos Flatten y ConvertBack soportan ambos.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué