2010-02-16 4 views
19

Se ho una classe come questa:Come si esclude la permanenza di una proprietà nell'archivio di Azure Table?

public class Facet : TableServiceEntity 
{ 
    public Guid ParentId { get; set; }  
    public string Name { get; set; } 
    public string Uri{ get; set; } 
    public Facet Parent { get; set; } 
} 

Parent deriva dal ParentId Guid, e che il rapporto è destinato ad essere riempito dal mio repository. Quindi, come faccio a comunicare ad Azure di lasciare il campo da solo? Esiste un attributo Ignore di qualche tipo oppure devo creare una classe ereditata che fornisca invece tali relazioni?

+0

Lo fanno ora http://stackoverflow.com/questions/5379393/do-azure-table -services-entities-have-a-equivalent-of-nonserializedattribute –

risposta

4

Questa risposta da Andy Cross a bwc --- Grazie ancora Andy. This question an azure forums

Ciao,

Utilizzare il WritingEntity e gli eventi ReadingEntity. http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.writingentity.aspx Questo ti dà tutto il controllo di cui hai bisogno.

Per riferimento c'è un post sul blog collegato fuori anche qui: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d9144bb5-d8bb-4e42-a478-58addebfc3c8

Grazie Andy

+2

Purtroppo i collegamenti al forum non funzionano più :-(MSDN ha davvero rovinato i suoi collegamenti! –

3

Si può ignorare il metodo WriteEntity in TableEntity e rimuovere tutte le proprietà che hanno il tuo attributo personalizzato.

public class CustomTableEntity : TableEntity 
{ 
    public override IDictionary<string, EntityProperty> WriteEntity(Microsoft.WindowsAzure.Storage.OperationContext operationContext) 
    { 
     var entityProperties = base.WriteEntity(operationContext); 
     var objectProperties = GetType().GetProperties(); 

     foreach (var property in from property in objectProperties 
           let nonSerializedAttributes = property.GetCustomAttributes(typeof(NonSerializedOnAzureAttribute), false) 
           where nonSerializedAttributes.Length > 0 
           select property) 
     { 
      entityProperties.Remove(property.Name); 
     } 

     return entityProperties; 
    } 
} 

[AttributeUsage(AttributeTargets.Property)] 
public class NonSerializedOnAzureAttribute : Attribute 
{ 
} 

utilizzo

public class MyEntity : CustomTableEntity 
{ 
    public string MyProperty { get; set; } 

    [NonSerializedOnAzure] 
    public string MyIgnoredProperty { get; set; } 
} 
8

C'è un attributo chiamato WindowsAzure.Table.Attributes.IgnoreAttribute può essere impostato sulla proprietà che si desidera escludere. Basta usare:

[Ignore] 
public string MyProperty { get; set; } 

è una parte di Windows Azure estensioni di storage, che si può scaricare da: https://github.com/dtretyakov/WindowsAzure

o installare come pacchetto: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

La biblioteca è concesso in licenza MIT.

+3

Questo è stato sostituito da "IgnorePropertyAttribute', si veda [IgnorePropertyAttribute Classe] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.ignorepropertyattribute.aspx). – Aaron

15

Utilizzando la più recente Microsoft.WindowsAzure.Storage SDK (V6.2.0 in su), il nome dell'attributo è cambiato a IgnorePropertyAttribute:

public class MyEntity : TableEntity 
{ 
    public string MyProperty { get; set; } 

    [IgnoreProperty] 
    public string MyIgnoredProperty { get; set; } 
} 
Problemi correlati