如果您想將兩個不同的數據庫視爲同一個數據庫,就您的應用程序而言,您需要在它們之間建立一個抽象層來隱藏差異。
我想你在這裏有幾個選擇。一種方法是使用兩種不同的EF模型,然後您可以看到存儲庫模式以抽取它們之間的差異。第二種選擇是做某種條件映射。
您還沒有非常具體的數據庫之間的差異,所以很難給每個選項的具體例子,但對於第一次的總體思路是,你寫的表示存儲的接口,如:
interface IAnimalRepository
{
IQueryable<Animal> SelectAll();
Animal Insert(Animal newRecord);
// etc.
}
現在,您將針對此界面編寫服務/業務層,而不是直接針對上下文。
您可以實現,說「老」 EF映射,像這樣的接口:
class AnimalRepository: IAnimalRepository
{
private OldEntities Context { get; set; }
public AnimalRepository(OldEntities context)
{
this.Context = context;
}
IQueryable<Animal> IAnimalRepositorySelectAll()
{
return from oa in Context.OldAnimals
select new Animal // Animal is a POCO
{
Id = oa.Id,
Name = oa.Name
};
}
// etc.
}
第二個選擇是做一個條件映射。在這種情況下,您將使用當前位於CTP for Entity Framework 4中的新Code First功能,該功能允許您在運行時指定表名和行名。
在這兩個選項中,我可能會選擇存儲庫模式選項,因爲我想你會想要使用存儲庫模式。它使單元測試和其他問題變得更簡單。但是任何一個都會工作。
我其實想過了,但問題是輸入到新數據庫中的數據也應該是老的。所以如果我使用這種方法,我將不得不實現一個導出功能,或者進行某種同步 – kalan 2010-07-07 11:02:06
是的,你可能需要做某種同步,但應該可以通過比較時間戳找出最近的數據。 – Calanus 2010-07-07 11:49:50