這是可行的。我已經幫助建立了一個規模很大的客戶端。
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