2011-02-14 62 views
0

我們有一個運行在不同視圖(WinForms,asp.net)上的.net解決方案。
作爲數據訪問層我們使用實體框架4. 作爲後端數據庫的我們使用SQL服務器和sqlCe。
Sqlce用於存儲胖客戶端的原始數據庫的副本。EF 4 - 相同的環境,不同的商店?

所以通過這個星座到達我的問題:

是否有可能使用相同的ObjectContext兩個不同的數據存儲?
(在SQL服務器和sqlce相同的數據庫)
或者使用POCO或不同的體系結構更好嗎?

感謝

回答

1

如果你的本地數據庫(SQL CE)具有完全相同的結構大數據庫(SQL Server),你可以通過不同的連接字符串到ObjectContext構造函數中使用同樣的映射。實體/ POCO將是相同的。

如果您的本地數據庫不具有相同的結構,則需要兩個映射集(EDMX),並且您可能需要兩個不同的上下文(除非直接使用ObjectContext)。如果您的本地映射使用與您的服務器映射相同的實體,您將能夠將它們映射到相同的POCO類。

+0

謝謝您的回答。首先,我會嘗試使用相同的edmx並更改連接字符串。我發現這個主題的另一篇文章: http://stackoverflow.com/questions/3955383/entity-framework-use-model-for-different-providers。謝謝! – 2011-02-14 16:14:06

1

好吧,對我來說工作得很好。

1.取代ssdl文件。如本文所述:Preparing an Entity Framework model for multi provider support

2.將* .ssdl文件的構建操作設置爲嵌入式資源。

3.Changed我的ConnectionString

public static String GetEntityConnectionString() 
    { 
     string csdl = "Test"; 
     string ssdl = "Namespace.NewSsdl.ssdl"; //multi provider support (.ssdl embedded in ressource) 
     string msl = "Test"; 

     EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(); 

     //Provider 
     builder.Provider = "System.Data.SqlClient"; 
     builder.ProviderConnectionString = GetProviderConnectionStringPL(); 

     //Metadata 
     builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{1}|res://*/{2}.msl", csdl, ssdl, msl); 

     return builder.ToString(); 

    } 
相關問題