这是可行的。我已经帮助建立了一个规模很大的客户端。
1)不要从TableServiceEntity继承,而是落实在你的实体以下属性:
[DataServiceKey(new string[] { "PartitionKey", "RowKey" }), Serializable]
此外,实施某种在你的实体,它提供PartitionKey,RowKey和时间戳到您的实体的接口。
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属性
4)注入他们在某些时候,你会需要你的ATS专用仓库做你的实体的一些转换为持久性的缘故,因为你将数据保存到ATS的方式是不一样,你会想在你的域模型(这尤其涉及到分层或关系数据)
HTH
我想什么避免是我们目前所在的地方:我们有一些不可知论的模型和实现特定的模型,a nd他们知道如何构建彼此,但这是一个巨大的PITA – 2012-07-18 20:52:30
我们开始使用ValueInjecter和Automapper在模型之间进行切换,这大大减少了问题,但我仍然不喜欢整体概念。 – 2012-08-08 15:42:31