1

我有一组实体,我想通过存储库模式保留它们。

Vanilla SQL 非常简单,编写一些具有获取/返回实体的查询的方法。

Azure 表存储也非常简单,除了我见过的大多数实现都希望实体从一些常见的 Azure 基类中继承。(表服务实体等)

EF 也可以,但也想拥有更多的实体。

有没有一种好方法可以抽象出 SQL 和 Azure 表的内容,以便实体可以以任何一种方式持久化?

双向支持并不是真正需要的,我们只是需要支持两种不同的部署类型。

我希望模型尽可能不依赖于它们被持久化的存储库,尽可能少的依赖(没有?!)。

4

1 回答 1

2

这是可行的。我已经帮助一个相当大的客户构建了这个。

1)不要从 TableServiceEntity 继承,而是在您的实体上实现以下属性:

[DataServiceKey(new string[] { "PartitionKey", "RowKey" }), Serializable]

此外,在您的实体上实现某种接口,为您的实体提供 PartitionKey、RowKey 和 Timestamp。

public interface ITableEntity
{
    string PartitionKey { get; set; }
    string RowKey { get; set; }
    DateTime Timestamp { get; set; }
}

至少这种方法将允许您对自己的实体拥有自己的继承策略,并且不会因为缺乏多重继承而受到限制。尝试让 PartitionKey 和 RowKey 简单地提供对真实键属性的传递,而不是复制键。

public string PartitionKey
{
       get
       {
          return this.Id;
       }
       set
       {
         this.Id = value;
       }
}

2) 请意识到您的系统中有两种类型的存储库:关系特定的和 ATS 特定的。

3)您可以通过 EDMX 生成实体并使用部分类将其注入 ITableEntity 和 DataServiceKey 属性

(这尤其涉及分层或关系数据)

高温高压

于 2012-07-18T22:32:03.813 回答