2010-02-16 12 views
19

Si j'ai une classe comme ceci:Comment exclure une propriété d'une persistance dans le stockage 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 est dérivé du ParentId Guid, et cette relation est destinée à être remplie par mon dépôt. Alors, comment puis-je dire à Azure de laisser ce champ tranquille? Y a-t-il un attribut Ignore d'un certain type, ou dois-je créer une classe héritée qui fournit ces relations à la place?

+0

Ils font maintenant http://stackoverflow.com/questions/5379393/do-azure-table -services-entities-have-an-equivalent-of-nonserializedattribute –

Répondre

4

Cette réponse d'Andy Cross à bwc --- Merci encore Andy. This question an azure forums

Salut,

Utilisez le WritingEntity et les événements ReadingEntity. http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.writingentity.aspx Cela vous donne tout le contrôle dont vous avez besoin.

Pour référence, il y a un blog lié au large ici aussi: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d9144bb5-d8bb-4e42-a478-58addebfc3c8

Merci Andy

+2

Malheureusement, les liens vers le forum ne fonctionnent plus :-(MSDN a vraiment bousillé ses liens! –

3

Vous pouvez remplacer la méthode WriteEntity dans TableEntity et supprimer toutes les propriétés qui ont votre attribut personnalisé.

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

utilisation

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

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

Il y a un attribut appelé WindowsAzure.Table.Attributes.IgnoreAttribute peut être définie sur la propriété que vous voulez exclure. Il suffit d'utiliser:

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

Il est une partie de Windows Azure extensions de stockage, que vous pouvez télécharger à partir de: https://github.com/dtretyakov/WindowsAzure

ou installer un package: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

La bibliothèque est MIT sous licence.

+3

Cela a depuis été remplacé par le 'IgnorePropertyAttribute', voir [IgnorePropertyAttribute Classe] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.ignorepropertyattribute.aspx). – Aaron

15

En utilisant le dernier Microsoft.WindowsAzure.Storage SDK (v6.2.0 et plus), le nom d'attribut a changé à IgnorePropertyAttribute:

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

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