29

如果我有这样的课程:

    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

5 回答 5

42

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

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

     [IgnoreProperty]
     public string MyIgnoredProperty { get; set; }
}
于 2016-03-13T23:28:58.697 回答
9

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

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

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

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

该库是麻省理工学院许可的。

于 2013-07-15T13:31:43.973 回答
4

来自 bwc 的 Andy Cross 的回复 --- 再次感谢 Andy。 这个问题是一个天蓝色的论坛

你好,

使用 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

谢谢安迪

于 2010-02-18T15:53:19.217 回答
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; }
}
于 2013-04-19T11:14:14.723 回答
0

您还可以将 getter 和 setter 设为非公开,以便跳过将属性保存在表存储数据库中。

请参阅:https ://stackoverflow.com/a/21071796/5714633

于 2021-09-20T08:41:29.757 回答