2010-02-16 81 views
19

如果我有這樣一個類:如何排除在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導出,這種關係旨在通過我的倉庫填寫。那麼,我該如何告訴Azure獨自離開這個領域呢?是否存在某種類型的Ignore屬性,還是必須創建一個繼承的類來提供這些關係?

+0

他們現在做http://stackoverflow.com/questions/5379393/do-azure-table -services-entities-have-an-an-an-an-an-an-an -serialserializedtribute – 2014-09-09 21:32:03

回答

4

Andy bwc的回覆---再次感謝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

感謝 安迪

+2

不幸的是,論壇的鏈接不再工作:-(MSDN真的搞砸了它的鏈接! – 2012-03-24 22:24:52

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

圖書館是MIT許可。

+3

這已經被'IgnorePropertyAttribute'取代,參見[IgnorePropertyAttribute類(https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.ignorepropertyattribute.aspx)。 – Aaron 2015-04-05 08:48:33

15

採用了最新Microsoft.WindowsAzure.Storage SDK(V6.2.0及以上),屬性名稱已更改爲IgnorePropertyAttribute

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

    [IgnoreProperty] 
    public string MyIgnoredProperty { get; set; } 
} 
相關問題