2010-02-16 8 views
19

Wenn ich eine Klasse wie dieses:Wie können Sie verhindern, dass eine Eigenschaft im Azure-Tabellenspeicher beibehalten wird?

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

Elternteil stammt aus dem ParentId Guid, und diese Beziehung soll von meinem Repository ausgefüllt werden. Wie kann ich Azure sagen, dass sie dieses Feld alleine verlassen soll? Gibt es ein Ignore-Attribut eines Typs oder muss ich eine geerbte Klasse erstellen, die diese Beziehungen stattdessen bereitstellt?

+0

Sie tun jetzt http://stackoverflow.com/questions/5379393/do-azure-table -services-entities-have-an-equivalent-of-nonserializedattribute –

Antwort

4

Diese Antwort von Andy Cross bei bwc --- Danke nochmal Andy. This question an azure forums

Hallo,

Verwenden Sie die WritingEntity und ReadingEntity Veranstaltungen. http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.writingentity.aspx Das gibt Ihnen die Kontrolle, die Sie brauchen.

Als Referenz gibt es einen Blog-Post auch hier verlinkt ab: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d9144bb5-d8bb-4e42-a478-58addebfc3c8

Dank Andy

+2

Leider funktionieren die Links zum Forum nicht mehr :-(MSDN hat wirklich seine Links vermasselt! –

3

Sie können die WriteEntity Methode in TableEntity außer Kraft setzen und alle Eigenschaften entfernen, die Ihre benutzerdefinierte Attribute haben.

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

Nutzung

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

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

Es ist ein Attribut namens WindowsAzure.Table.Attributes.IgnoreAttribute auf der Eigenschaft, die Sie ausschließen möchten, eingestellt werden kann. Verwenden Sie einfach:

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

Es ist ein Teil von Windows Azure Storage-Erweiterung ist, die Sie von herunterladen können: https://github.com/dtretyakov/WindowsAzure

oder installieren als Paket: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

Die Bibliothek ist MIT lizenziert.

+3

Diese wurde inzwischen durch 'IgnorePropertyAttribute' ersetzt, siehe [IgnorePropertyAttribute Klasse] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.ignorepropertyattribute.aspx). – Aaron

15

Mit neuesten Microsoft.WindowsAzure.Storage SDK (V6.2.0 oder höher) hat die Attributnamen zu IgnorePropertyAttribute geändert:

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

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