2010-02-16 7 views
19

Jeśli mam klasy jak poniżej:W jaki sposób można wykluczyć możliwość utrwalenia właściwości w magazynie 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; } 
} 

dominująca jest pochodzący z parentId GUID, i że związek jest przeznaczony do wypełnienia przez mojego repozytorium. W jaki sposób mogę nakazać Azure pozostawienie tego pola w spokoju? Czy istnieje atrybut Ignore jakiegoś typu, czy też muszę utworzyć odziedziczoną klasę, która zapewnia te relacje zamiast?

+0

Robią teraz http://stackoverflow.com/questions/5379393/do-azure-table -services-entity-ma-odpowiednik-od-niezsowitalizowanego atrybutu –

Odpowiedz

4

Ta odpowiedź od Andy Cross na bwc --- Jeszcze raz dziękuję Andy. This question an azure forums

Cześć,

Użyj zdarzenia ReadingEntity się WritingEntity i. http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.writingentity.aspx Zapewnia to pełną kontrolę.

Dla odniesienia istnieje blogu związane off tutaj zbyt: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d9144bb5-d8bb-4e42-a478-58addebfc3c8

Thanks Andy

+2

Niestety linki do forum już nie działają :-(MSDN naprawdę zepsuł swoje linki! –

3

można zastąpić metodę WriteEntity w TableEntity i usunąć wszelkie właściwości, które mają swój atrybut niestandardowy.

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

Wykorzystanie

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

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

Jest to atrybut o nazwie WindowsAzure.Table.Attributes.IgnoreAttribute można ustawić na nieruchomości, które chcesz wykluczyć. Wystarczy użyć:

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

Jest częścią Windows Azure Storage Extensions, które można pobrać z: https://github.com/dtretyakov/WindowsAzure

lub zainstalować jako opakowaniu: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

Biblioteka jest MIT licencjonowane.

+3

Zostało to zastąpione przez 'IgnorePropertyAttribute', zobacz [IgnorePropertyAttribute Klasa] (https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.ignorepropertyattribute.aspx). – Aaron

15

Korzystanie najnowszą Microsoft.WindowsAzure.Storage SDK (V6.2.0 i więcej), nazwa atrybutu zmienił się IgnorePropertyAttribute:

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

    [IgnoreProperty] 
    public string MyIgnoredProperty { get; set; } 
} 
Powiązane problemy