Как вы исключаете свойство сохраняться в хранилище таблиц Azure?
Если у меня есть класс вроде этого:
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 Guid, и эта связь предназначена для заполнения моим репозиторием. Итак, как я могу сказать Лазуру оставить это поле в покое? Есть ли атрибут Ignore какого-либо типа, или мне нужно создать унаследованный класс, который предоставляет эти отношения?
Ответы
Ответ 1
Используя последний Microsoft.WindowsAzure.Storage SDK (v6.2.0 и выше), имя атрибута было изменено на IgnorePropertyAttribute
:
public class MyEntity : TableEntity
{
public string MyProperty { get; set; }
[IgnoreProperty]
public string MyIgnoredProperty { get; set; }
}
Ответ 2
Существует атрибут под названием 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.
Ответ 3
Этот ответ от Энди Кросса на bwc --- Еще раз спасибо Энди.
Этот вопрос azure forums
Привет,
Используйте события 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
Спасибо
Andy
Ответ 4
Вы можете переопределить метод 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; }
}