I am actually using the Azure Storage Table provider for EF (EntityFramework.AzureTableStorage 7.0.0-beta1).
I've ended up how to configure the 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
}
}
But Now I would like to add an enum as part of the Subscription
model.
I've found a workaround to do this:
I've got an enum :
public enum QueuePriority
{
High,
Low
}
I've added these properties to the Subscription
class:
public int PriorityId { get; set; }
public QueuePriority Priority
{
get { return (QueuePriority)PriorityId; }
set { PriorityId = (int)value; }
}
And Declare the Priority
property as shadow in EF configuration so that I'm not going to have the PriorityId and the Priority stored both in the Azure Table :
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();
}
So I am wondering if there is a better way to accomplish this and/or If next versions of EF.AzureTableStorage is going to support Enum ?
Thanks
EF Azure Table Storage beta1 was a prototype that has been discontinued for now. See also https://stackoverflow.com/a/35071077/2526265