2010-02-16 15 views
19

Si tengo una clase como esta:¿Cómo excluye que persista una propiedad en el almacenamiento de 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; } 
} 

Padres se deriva de la parentid Guid, y esa relación está destinado a ser rellenado por mi repositorio. Entonces, ¿cómo le digo a Azure que deje ese campo en paz? ¿Hay un atributo Ignorar de algún tipo, o tengo que crear una clase heredada que proporcione esas relaciones en su lugar?

+0

Lo hacen ahora http://stackoverflow.com/questions/5379393/do-azure-table -Servicios-entidades-tener-un equivalente de de-NonSerializedAttribute –

Respuesta

4

Esta respuesta de Andy Cross en bwc --- Gracias de nuevo Andy. This question an azure forums

Hola,

Utilice el WritingEntity y eventos ReadingEntity. http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.writingentity.aspx Esto le brinda todo el control que necesita.

Como referencia hay una entrada en el blog ligado fuera aquí también: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d9144bb5-d8bb-4e42-a478-58addebfc3c8

Gracias Andy

+2

Lamentablemente los enlaces al foro ya no funcionan :-(MSDN realmente jodido sus enlaces! –

3

Es posible reemplazar el método WriteEntity en TableEntity y eliminar cualquier propiedades que tienen el atributo personalizado.

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

uso

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

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

Hay un atributo llamado WindowsAzure.Table.Attributes.IgnoreAttribute se pueden establecer en la propiedad que desea excluir. Sólo tiene que utilizar:

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

Es una parte de Azure Extensiones de almacenamiento de Windows, que se puede descargar de: https://github.com/dtretyakov/WindowsAzure

o instalar como un paquete: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

La biblioteca tiene licencia MIT.

+3

Esto ya ha sido reemplazado por el 'IgnorePropertyAttribute', véase [IgnorePropertyAttribute Clase] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.ignorepropertyattribute.aspx). – Aaron

15

Usando la última Microsoft.WindowsAzure.Storage SDK (V6.2.0 y superior), el nombre del atributo ha cambiado a IgnorePropertyAttribute:

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

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