這是一種客戶端 - 服務器體系結構問題。在實體框架(C#.Net)中共享客戶端和服務器之間的數據庫訪問方法
我在我的解決方案中有兩個項目:一個用於實體框架和SQL Server Compact數據庫的客戶端項目,另一個用於服務器端的項目也使用實體框架但使用真正的SQL Server數據庫。兩個數據庫都有完全相同的數據庫模式,因此雖然它們使用的是不同的.edmx文件,但生成的實體看起來是相同的,並且僅在名稱空間中有所不同。順便說一下,我使用ADO.NET DbContext生成器來生成持久性無知的實體類。到現在爲止還挺好。現在我寫的所有服務器的數據庫訪問內部方法(相當大的)類,例如:
public User CreateUser(string userId, string username, bool isGlobalAdmin)
{
using (var context = new ServerEntities())
{
try
{
var user = new User
{
UserID = userId,
Username = username,
IsGlobalAdmin = isGlobalAdmin
};
context.User.Add(user);
context.SaveChanges();
return user;
}
catch (Exception ex)
{
HandleEfException(ex);
}
}
return null;
}
的問題是,我需要在客戶端同樣的方法在同一類。所以我會將這個類複製到客戶端項目中,將ServerEntities重命名爲ClientEntities並更改使用客戶端實體的名稱空間。這很難看,因爲如果有什麼變化,我需要維護這兩個類。有沒有一種方法可以抽象出整個事物並在兩側(客戶端和服務器)使用同一個類(位於另外兩個項目引用的單獨項目中)?
我真的很感謝你的幫助。
最佳,
安東尼
謝謝你的回答,大衛。我不確定這是否可以用於我的場景,但它的工作。我創建了一個包含所有生成實體的單獨項目。我也編寫了自己的DbContext類,而不是使用自動生成的類。該項目還包含我的課程,包含所有數據庫操作。在這個類的構造函數中,我可以在服務器和客戶端之間進行選擇,因此所有的方法都使用適合特定數據庫的正確連接字符串。它像一個魅力:)再次感謝,大衛! – Antony 2012-04-05 17:58:36