In realtà sto utilizzando il provider Azure Storage Table per EF ( EntityFramework.AzureTableStorage 7.0.0-beta1 ).
Ho finito per configurare 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
}
}
Ma ora vorrei aggiungere un enum come parte del modello Subscription
. Ho trovato una soluzione alternativa per fare questo:
Ho un enume:
public enum QueuePriority
{
High,
Low
}
Ho aggiunto queste proprietà alla classe Subscription
:
public int PriorityId { get; set; }
public QueuePriority Priority
{
get { return (QueuePriority)PriorityId; }
set { PriorityId = (int)value; }
}
E Dichiara la proprietà Priority
come shadow nella configurazione EF in modo che non abbia il PriorityId e la Priorità archiviati entrambi nella Tabella di 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();
}
Quindi mi chiedo se c'è un modo migliore per farlo e / o se le prossime versioni di EF.AzureTableStorage supporteranno Enum?
Grazie
EF Azure Table Storage beta1 era un prototipo che è stato interrotto per ora. Vedi anche https://stackoverflow.com/a/35071077/2526265
La versione di Azure Table Storage SDK> 8.0.0 supporta già enumerazioni e molti altri tipi di proprietà semplici e complessi, quindi non è necessario utilizzare un framework aggiuntivo solo per tale scopo.
Puoi semplicemente appiattire il tuo oggetto POCO usando il metodo TableEntity.Flatten: https://msdn.microsoft.com/en-us/library/azure/mt775435.aspx
Scrivi il dizionario appiattito nella memoria della tabella. Quando leggi, passa il dizionario di EntityProperties al metodo TableEntity.ConvertBack
: https://msdn.microsoft.com/en-us/library/azure/mt775435.aspx
e ricompone il tuo oggetto originale incluso il suo Enum
e altri tipi di proprietà.
Le classi di entità non hanno bisogno di ereditare dalla classe TableEntity
o implementare ITableEntity
interfaccia ITableEntity
, possono essere solo oggetti POCO con proprietà semplici OPPURE possono avere nidificate proprietà complesse proprie con molti livelli di oggetti grafici. ConvertBack
metodi Flatten
e ConvertBack
supportano entrambi.