如何排除属性在Azure表存储中保留?

时间:2010-02-16 23:39:46

标签: azure azure-storage azure-table-storage

如果我有这样的课程:

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

Parent来自ParentId Guid,该关系旨在由我的存储库填充。那么我如何告诉Azure单独留下该字段?是否存在某种类型的Ignore属性,或者我是否必须创建一个提供这些关系的继承类?

4 个答案:

答案 0 :(得分:23)

使用最新的Microsoft.WindowsAzure.Storage SDK(v6.2.0及更高版本),属性名称已更改为IgnorePropertyAttribute

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

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

答案 1 :(得分:8)

可以在要排除的属性上设置名为WindowsAzure.Table.Attributes.IgnoreAttribute的属性。只需使用:

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

它是Windows Azure存储扩展的一部分,您可以从以下位置下载: https://github.com/dtretyakov/WindowsAzure

或作为包安装: https://www.nuget.org/packages/WindowsAzure.StorageExtensions/

图书馆已获得麻省理工学院的许可。

答案 2 :(得分:4)

安迪·克罗斯在bwc的回复---再次感谢安迪。 This question an 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

由于 安迪

答案 3 :(得分:3)

您可以覆盖TableEntity中的WriteEntity方法,并删除具有自定义属性的所有属性。

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