Entity Framework - Azureテーブルストレージプロバイダ - Enumサポート

azure-table-storage entity-framework-core

質問

私は実際にAzure Storage TableプロバイダをEF( 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モデルの一部として列挙型を追加したいと思います。私はこれを行うための回避策を見つけました:

私はenumを持っている:

public enum QueuePriority
{
    High,
    Low
}

私はこれらのプロパティをSubscriptionクラスに追加しました:

public int PriorityId { get; set; }

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

AzureテーブルにPriorityIdとPriorityを両方とも格納しないように、EF構成ではPriorityプロパティをシャドウとして宣言します。

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();
}

だから私はこれを達成するためのよりよい方法があるのか​​、それともEF.AzureTableStorageの次のバージョンがEnumをサポートするのか疑問に思っていますか?

ありがとう

受け入れられた回答

EF Azure Table Storageベータ1は、現在中止されているプロトタイプでした。 https://stackoverflow.com/a/35071077/2526265も参照してください。


人気のある回答

Azure Table Storage SDKバージョン8.0.0より前のバージョンではenumや他の多くの単純で複雑なプロパティタイプをサポートしていますので、その目的のためだけに余分なフレームワークを使用する必要はありません。

TableEntity.Flattenメソッドを使用して、POCOオブジェクトを単純にフラット化できます。https ://msdn.microsoft.com/en-us/library/azure/mt775435.aspx

フラット化された辞書をテーブルストレージに書き込みます。 EntityPropertiesの辞書をTableEntity.ConvertBackメソッドに渡すだけで読むと、次のようにTableEntity.ConvertBack ます。https : TableEntity.ConvertBack

Enumやその他のタイプのプロパティを含む元のオブジェクトを再構成します。

エンティティクラスはTableEntityクラスから継承する必要はなく、 ITableEntityインターフェイスを実装する必要はありません。単純なプロパティを持つPOCOオブジェクトだけITableEntity TableEntityません。また、オブジェクトグラフの多くのレイヤーで独自の複雑なプロパティをネストすることもできます。 FlattenメソッドとConvertBackメソッドは、両方をサポートしています。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ