我想将这样的实体用于表存储:

public class MyEntity
{
    public String Text { get; private set; }
    public Int32 SomeValue { get; private set; }

    public MyEntity(String text, Int32 someValue)
    {
        Text = text;
        SomeValue = someValue;
    }
}


但这是不可能的,因为ATS需要


无参数构造函数
所有公共场所和
读/写。
从TableServiceEntity继承;


前两个是我不想做的两件事。为什么我希望任何人都可以更改一些只读数据?或以不一致的方式创建此类对象(那么.ctor的含义是什么?),或者甚至更糟的是,更改PartitionKey或RowKey。为什么我们仍然受到这些反序列化要求的约束?

我不喜欢以这种方式开发软件,如何使用可以序列化和反序列化对象的方式使用表存储库?我认为只要对象从TableServiceEntity继承就不会有问题。

到目前为止,我必须保存一个对象,但是我不知道如何检索它:

            Message m = new Message("message XXXXXXXXXXXXX");

            CloudTableClient tableClient = account.CreateCloudTableClient();
            tableClient.CreateTableIfNotExist("Messages");
            TableServiceContext tcontext = new TableServiceContext(account.TableEndpoint.AbsoluteUri, account.Credentials);

            var list = tableClient.ListTables().ToArray();

            tcontext.AddObject("Messages", m);
            tcontext.SaveChanges();


有什么方法可以避免那些反序列化要求或获取原始对象?

干杯。

最佳答案

围绕表存储的ADO.NET包装器的约束确实有些痛苦。您还可以采用Fat Entity中实现的Lokad.Cloud方法。这将为您提供更多有关实体序列化的灵活性。

08-17 05:19