3

我想從ASP.NET MVC項目中首先使用SQL Server CE 4的EF代碼,但不是在App_Data文件夾中創建數據庫,而是在我的工作站上安裝的SQL Server Express實例中獲得新數據庫。安裝SQL Server Express時,如何強制實體框架代碼優先使用SQL Server CE?

如何獲得在App_Data文件夾中創建的數據庫?

web.config

<connectionStrings> 
    <add name="NerdDinners" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" 
     providerName="System.Data.SqlServerCe.4.0"/> 
    </connectionStrings> 

Context類:

public class NerdDinners : DbContext 
{ 
    public DbSet<Dinner> Dinners { get; set; } 
    public DbSet<RSVP> RSVPs { get; set; } 
} 

編輯1
我想去阻止SQL Server Express的思維,可能迫使使用SQL Server CE的,但它導致了ProviderIncompatibleException,內部例外爲

{"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"}

所以看來我的設置想要使用SQL Server Express。

編輯2 有人建議我在連接字符串名稱,明確傳遞到的DbContext,所以我改變了我的上下文類以下幾點:

public class NerdDinners : DbContext 
    { 
     public NerdDinners() : base("NerdDinners") { } 

     public DbSet<Dinner> Dinners { get; set; } 
     public DbSet<RSVP> RSVPs { get; set; } 
    } 

在DinnersController控制器,這是上下文如何實例化:

public class DinnersController : Controller 
    { 
     private NerdDinners db = new NerdDinners(); 

     // 
     // GET: /Dinners/ 

     public ViewResult Index() 
     { 
      return View(db.Dinners.ToList()); 
     } 

做出這些更改後,數據庫仍在SQL Server Express中創建,因此看起來我的連接字符串被忽略。

+0

你有它配置如上,並沒有得到sdf文件出現在斌/調試? – 2012-03-01 20:47:09

+0

@Adam Tuliper - 這是正確的。我在本地SQL Server Express實例中獲得一個新的數據庫。 – DaveB 2012-03-01 20:51:34

+0

沒有其他連接字符串?還是安裝了sqlce v 4? – 2012-03-01 20:53:27

回答

1

在ASP.NET MVC中有兩個web.config文件。連接字符串需要在網站的根目錄下,而不是在視圖目錄(我有我的地方)。一旦我把連接字符串放在項目根目錄下的web.config中,我的SQL Server CE數據庫就是先使用代碼創建的,並且工作正常!

+0

did not甚至認爲你會添加,因爲它幾乎配置什麼只允許您的意見。這將解釋爲什麼它不會找到它! :) – 2012-03-06 16:20:22

0

下載EFProfiler的試用版,查看是否可以看到連接字符串的名稱。

確保遵守上述規則。如果你想給我一個樣本項目,我會檢查你的,但我的工作沒有指定連接字符串和使用SQL CE。在上面的鏈接下載我的演示項目 - 是否有效?如果沒有,我會質疑CE二進制文件。

您的上下文類是否在同一個項目中?是你的連接字符串命名爲你的上下文類(它應該是)

換句話說,你的web.config你有NerdDinners,它的上下文類實際上命名爲NerdDinners,如果不是它需要或改變id在連接字符串中。

相關問題