實體框架 - Azure表存儲提供程序 - Enum支持


我實際上使用的是Azure存儲表提供程序( EntityFramework.AzureTableStorage 7.0.0-beta1 )。

我最終得到瞭如何配置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
    }
}

但是現在我想添加一個枚舉作為Subscription模型的一部分。我找到了一個解決方法來做到這一點:

我有一個枚舉:

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
    }
}

我已將這些屬性添加到Subscription類:

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
    }
}

並在EF配置中將Priority屬性聲明為陰影,這樣我就不會在Azure表中同時存儲PriorityId和Priority:

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
    }
}

所以我想知道是否有更好的方法來實現這個和/或如果下一版本的EF.AzureTableStorage將支持Enum?

謝謝

一般承認的答案

EF Azure Table Storage beta1是原型,目前已停產。另請參見https://stackoverflow.com/a/35071077/2526265


熱門答案

Azure Table Storage SDK版本> 8.0.0已經支持枚舉和許多其他簡單和復雜的屬性類型,因此您不需要為此目的使用額外的框架。

您可以使用TableEntity.Flatten方法簡單地展平您的POCO對象: https ://msdn.microsoft.com/en-us/library/azure/mt775435.aspx

將展平的字典寫入表存儲。閱讀時只需將EntityProperties字典傳遞給TableEntity.ConvertBack方法: httpsTableEntity.ConvertBack

它將重新組合您的原始對象,包括其Enum和其他類型的屬性。

您的實體類不需要繼承TableEntity類或實現ITableEntity接口,它們可以只是具有簡單屬性的POCO對象,也可以具有多層對像圖的嵌套複雜屬性。 FlattenConvertBack方法都支持這兩種方法。





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因