0

Tshirt というエンティティを、Windows Azure Blob ストレージの BLOB と共に Windows Azure テーブル ストレージに格納しようとしています。そのエンティティ 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; }
    }
}
4

1 に答える 1

2

簡単な方法は、フィールドを実際のプロパティではなくメソッドのペアとして公開することです。

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

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

それができない場合は、WritingEntity イベントを処理して、エンティティを格納するときに Image プロパティを削除できます。(ニール・マッケンジーの功績

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();
}
于 2012-10-15T18:43:43.247 に答える