确定要在Windows Azure表存储中保存的字段

时间:2012-10-14 12:27:57

标签: azure-storage azure-table-storage

我正在尝试将名为Tshirt的实体存储到Windows Azure表存储中,并在Windows Azure Blob存储上存储Blob。 该实体Tshirt包含一个名为Image(byte [])的字段,但我不想在我的表中保存它。 我如何在班上表明我不想保存该字段?

public class Tshirt : TableServiceEntity
{

    public Tshirt(string partitionKey, string rowKey, string name)
    {
        this.PartitionKey = partitionKey;
        this.RowKey = rowKey;
        this.Name = name;

        this.ImageName = new Guid();
    }

    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }


    private string _color { get; set; }

    public string Color
    {
        get { return _color; }
        set { _color = value; }
    }


    private int _amount { get; set; }

    public int Amount
    {
        get { return _amount; }
        set { _amount = value; }
    }


    [NonSerialized]
    private byte[] _image;


    public byte[] Image
    {
        get { return _image; }
        set { _image = value; }
    }


    private Guid _imageName;

    public Guid ImageName
    {
        get { return _imageName; }
        set { _imageName = value; }
    }
}

1 个答案:

答案 0 :(得分:2)

简单的方法是将字段公开为一对方法而不是实际属性:

public byte[] GetImage()
{
    return _image;
}

public void SetImage(byte[] image)
{
    _image = image;
}

如果这不是一个选项,那么当您通过处理WritingEntity事件存储实体时,可以删除Image属性。 (Credit to Neil Mackenzie

public void AddTshirt(Tshirt tshirt)
{
    var context = new TableServiceContext(_baseAddress, _credentials);
    context.WritingEntity += new EventHandler<ReadingWritingEntityEventArgs>(RemoveImage);
    context.AddObject("Tshirt", tshirt);
    context.SaveChanges();
}

private void RemoveImage(object sender, ReadingWritingEntityEventArgs args)
{
    XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
    XElement imageElement = args.Data.Descendants(d + "Image").First();
    imageElement.Remove();
}