Как исключить сохранение свойства в хранилище таблиц Azure? - PullRequest
22 голосов
/ 17 февраля 2010

Если у меня есть такой класс:

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

Родитель получен из Руководства ParentId, и это отношение предназначено для заполнения моим хранилищем. Так как мне сказать Azure оставить это поле в покое? Есть ли какой-нибудь атрибут Ignore какого-либо типа или мне нужно создать унаследованный класс, который вместо этого обеспечивает эти отношения?

Ответы [ 4 ]

24 голосов
/ 14 марта 2016

Используя последний Microsoft.WindowsAzure.Storage SDK (v6.2.0 и выше), имя атрибута изменилось на IgnorePropertyAttribute:

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

     [IgnoreProperty]
     public string MyIgnoredProperty { get; set; }
}
8 голосов
/ 15 июля 2013

Существует атрибут WindowsAzure.Table.Attributes.IgnoreAttribute, который можно установить для свойства, которое вы хотите исключить. Просто используйте:

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

Это часть Windows Azure Storage Extensions, которую вы можете скачать с: https://github.com/dtretyakov/WindowsAzure

или установить в виде пакета: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

Библиотека имеет лицензию MIT.

4 голосов
/ 18 февраля 2010

Этот ответ от Энди Кросса на bwc --- Еще раз спасибо, Энди. Этот вопрос на лазурных форумах

Привет,

Используйте события WritingEntity и ReadingEntity.http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.writingentity.aspx Это дает вам все необходимое управление.

Для справки, здесь также есть ссылка на блог: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d9144bb5-d8bb-4e42-a478-58addebfc3c8

Спасибо, Энди

3 голосов
/ 19 апреля 2013

Вы можете переопределить метод WriteEntity в TableEntity и удалить все свойства, которые имеют ваш пользовательский атрибут.

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

использование

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

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