2011-03-05 130 views
27

我正在使用實體模型優先的方法開發一個實體框架4和SQL Compact 4的應用程序。我已經創建了我的EDM,現在我想生成一個SQL Compact 4.0數據庫來充當模型的數據存儲。我彈出生成數據庫嚮導並單擊新建連接按鈕爲生成的文件創建連接。該選擇數據源出現對話,但SQL精簡4.0沒有可用的數據源列表中列出:實體框架4和SQL Compact 4:如何生成數據庫?

enter image description here

我運行VS 2010 SP1(測試版),我已經安裝了VS 2010工具對於SQL Compact 4.0。我可以從服務器資源管理器創建一個SQL Compact 4.0數據連接。只有在生成數據庫嚮導中,4.0選項纔會出現。順便說一句,我的SQL Compact 4.0安裝包括System.Data.SqlServerCe.Entity.dll。所以我應該有我需要的SQL Compact組件。

我正在做的事情不正確,還是這是一個錯誤?有沒有人有修補程序或解決方法?謝謝你的幫助。

+0

David,你看過使用SQLite代替CE嗎?我發現SQLite更易於使用並完全支持EF4。 – 2011-03-06 17:09:44

回答

34

作爲一種變通方法,我現在用的是生成數據庫嚮導來生成一個SQL精簡3.5腳本,我掃蕩一空SQL精簡4.0數據庫在VS 2010解決方案資源管理器中創建運行。以下是完成該任務的步驟:

步驟1:運行生成數據庫嚮導。它會提示在第一頁創建一個文件,因此它會創建一個SQL Compact 3.5文件。這個文件是一個虛擬文件,所以你命名它並不重要。

步驟2:完成嚮導以創建將配置新數據庫的DDL腳本。

步驟3:刪除在步驟1中

步驟4中創建虛擬文件:使用VS 2010的服務器資源管理器創建實際的SQL精簡4.0文件,你會在你的項目中使用。

步驟5:生成數據庫嚮導兩處引用SQL契約 「3.5」 的EDMX文件;這些參考文件需要更改爲「4.0」。在VS 2010的XML編輯器中打開EDMX文件(右鍵單擊並選擇「打開方式」以進入XML編輯器)。第7行應包含「3.5」引用。將這些更改爲「4.0」並保存該文件。

第6步:在VS 2010中打開生成的EDMX.SQLCE腳本文件。VS將通過工作窗格底部的橫幅指示腳本已斷開連接。右鍵單擊橫幅上方的空白區域,然後在出現的上下文菜單中選擇連接>連接。這帶來了一個連接對話框 - 用它的腳本連接到您在步驟創建的SQL精簡4.0數據庫4.

步驟7:腳本中的空格再次右鍵單擊並選擇執行上下文菜單中的SQL。腳本將執行,您將在腳本下面的窗格中看到通常的結果消息。假定成功執行,數據庫將被配置爲匹配實體數據模型。

第8步:我們還需要確保App.config/web.config沒有指向虛擬文件。如果將其更改爲上述步驟4中創建的實際CE 4.0文件。否則,當我們對模型進行更改時,我們無法重新生成腳本。在配置文件中也將3.5更改爲4.0。

在這一點上,你應該能夠使用實體框架4來處理你的數據庫。

1

據我所知,當前版本的VS 2010不支持SQL CE 4.0。它應該包含在VS 2010 SP1(目前處於測試階段)。檢查this blog post,它也描述了在SP1中使用帶有SQL CE 4.0的EF Model。

編輯:

我發現這個workaround

+1

謝謝,但我已經安裝了SP1和VS工具。博客文章並沒有真正解決我的問題 - 它首先面向db-first和代碼,而我正在做模型優先。 – 2011-03-05 20:15:27

+0

我在尋找另一件事情時發現了一些解決方法。我添加了鏈接到我的答案。 – 2011-03-06 09:55:38

2

要回答的評論下面,並解決這些問題,根據: http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

這些嚮導到不行。

Visual Studio 2010 SP1 Beta中的VB或C#Windows項目中的設計器:以下向導不適用於Windows項目系統中的Compact 4.0。開發人員可以手動添加引用緊湊型4.0(System.Data.SqlServerCe)ADO.NET提供程序開發緊湊型4.0在Windows項目計劃:用於配置數據集

  1. 數據源配置嚮導。
  2. 配置數據配置嚮導用於設置使用Sync FX與SQL Server同步數據和模式。
  3. 用於從Compact數據庫生成實體的實體數據模型嚮導。

以下是針對這些問題接受的解決方法。 http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

+0

謝謝,但我的問題是實體框架4. EF4有一個*生成數據庫嚮導*,它將從實體數據模型中爲SQL Compact數據庫生成一個T-SQL腳本。它是*生成數據庫嚮導*,不會將SQL Compact 4顯示爲生成選項。 – 2011-03-05 22:59:22

+0

如果您要使用Transact SQL db腳本,CE語法與SQLServer沒有區別。你應該耐心地用這個腳本生成表格等等。我明白你的意思了。您是否嘗試添加與服務器資源管理器的連接?看看你建立連接後會不會出現?希望我能有更多的幫助。 – Dimentox 2011-03-06 00:33:27

+0

+1:感謝您的幫助。 – 2011-03-06 01:35:15

0

我可以運行從我Chinook.Data項目生成帶出任何問題數據庫嚮導,請確保你在你的app.config正確的連接字符串。 http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="ChinookEntities" connectionString="metadata=res://*/ChinookModel.csdl|res://*/ChinookModel.ssdl|res://*/ChinookModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=C:\projects\Chinook\Chinook40.sdf&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 
+0

謝謝,Erik - 當您運行「生成數據庫嚮導」時,您是否擁有SQL Compact 4.0的條目?嚮導爲我運行,但它不顯示Ver。 4.0作爲選項。 – 2011-03-08 15:07:20

+0

我剛剛得到生成DDL的第二個屏幕,但它不顯示步驟1中的4.0連接,這是正確的。您必須將edmx移動到Web項目才能在步驟1中看到4.0連接。 – ErikEJ 2011-03-11 09:32:04

+0

我開發了一種解決方法,可以從Entity Framework 4 EDM創建SQL Compact 4.0數據庫,而無需使用Web項目。看到這個問題的接受答案。 – 2011-03-16 22:23:18

1

您可以使用IDatabaseInitializer和使用

if (File.Exists("Test.sdf")) 
    File.Delete("Test.sdf"); 

string connStr = "Data Source = Test.sdf; Password = <password>"; 

SqlCeEngine engine = new SqlCeEngine(connStr); 
engine.CreateDatabase(); 
engine.Dispose(); 

SqlCeConnection conn = null; 

try { 
    conn = new SqlCeConnection(connStr); 
    conn.Open(); 

    SqlCeCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "CREATE TABLE myTable (col1 int, col2 ntext)"; 
    cmd.ExecuteNonQuery(); 

catch { 
finally { 
    conn.Close(); 

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceengine(v=vs.80).aspx

0

可能需要安裝SQL Server Compact 4 tools爲好,如果它不直接安裝時的Visual Studio 2010 SP1在代碼中創建數據庫已安裝,您可以安裝它。當我遇到問題時,這就是我的工作。