如果我有这样的课程:
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属性,或者我是否必须创建一个提供这些关系的继承类?
答案 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; }
}