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

cyej8jka  于 2023-04-22  发布在  其他
关注(0)|答案(6)|浏览(151)

如果我有一个这样的类:

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

js5cn81o

js5cn81o1#

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

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

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

5lwkijsr2#

有一个名为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许可的。

e1xvtsh3

e1xvtsh33#

这是安迪·克罗斯在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
谢谢安迪

a9wyjsp7

a9wyjsp74#

您可以重写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; }
}
km0tfn4u

km0tfn4u5#

您还可以使getter和setter为非公共的,以便跳过保存在表存储数据库中的属性。
参见:https://stackoverflow.com/a/21071796/5714633

nsc4cvqm

nsc4cvqm6#

这些答案可能有点过时了。
对于那些已经登陆并仍然需要最新版本Azure的此功能的用户,请使用[IgnoreDataMember]

相关问题