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

Posted

技术标签:

【中文标题】如何将属性排除在 Azure 表存储中?【英文标题】:How do you exclude a property from being persisted in Azure Table storage? 【发布时间】:2011-01-17 15:32:48 【问题描述】:

如果我有这样的课程:

    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 属性,还是我必须创建一个提供这些关系的继承类?

【问题讨论】:

他们现在可以***.com/questions/5379393/… 【参考方案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 存储扩展的一部分,您可以从以下网址下载: https://github.com/dtretyakov/WindowsAzure

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

该库已获得 MIT 许可。

【讨论】:

这已被IgnorePropertyAttribute 取代,请参阅IgnorePropertyAttribute Class。【参考方案3】:

来自 bwc 的 Andy Cross 的回复 --- 再次感谢 Andy。 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

谢谢 安迪

【讨论】:

遗憾的是,论坛的链接不再起作用 :-( MSDN 真的搞砸了它的链接!【参考方案4】:

您可以覆盖 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; 

【讨论】:

【参考方案5】:

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

见:https://***.com/a/21071796/5714633

【讨论】:

以上是关于如何将属性排除在 Azure 表存储中?的主要内容,如果未能解决你的问题,请参考以下文章

在引导表中如何隐藏/排除导出列

从春季安全会话序列化中排除属性?

如何排除对管道 yaml 文件的更改以触发构建 i azure devops?

ResourceNotFound 使用 InsertOrMerge:Azure 表存储 REST API

如何从 Swift Codable 中排除属性?

如何在 PySpark 中从表中导入数据时排除 Header