1

我成功創建了我的第一個使用SQL Server CE的實體框架代碼第一個項目。數據庫表是自動創建的,一切正常。在SQL Server 2008上設置實體框架代碼第一個數據庫

然後,我更改了連接字符串,指向我創建的SQL Server數據庫,並期望它自動生成表。它沒有,而是抱怨表不存在。

經過一番閱讀後,我發現我需要爲我的App_Start方法添加一個初始化程序。

我想:

// Method 1 
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFContext>()); 

但這並沒有在第一次工作,因爲它無法找到一個EdmMetaData表發現,如果模型發生了變化。

所以我嘗試添加:

// Method 2 
Database.SetInitializer(new CreateDatabaseIfNotExists<EFContext>()); 

但這並沒有工作,因爲我已經創建了數據庫,當我刪除的數據庫它仍然沒有工作,因爲我是在註銷用戶因爲沒有創建數據庫特權。

我終於嘗試:

// Method 3 
Database.SetInitializer(new DropCreateDatabaseAlways<EFContext>()); 

這工作,但我真的不希望每次都砸分貝。所以一旦運行並添加EdmMetaData表,我用方法1替換它,現在工作正常。

儘管此方法有效,但它並不像我使用SQL Server CE時那麼優雅,而且我還沒有發現有人建議您使用此方法。

所以,我錯過了一些東西,有沒有更簡單,更優雅的方式來做到這一點?

回答

1

方法1和2預計該數據庫尚不存在。如果您手動創建數據庫,則它們不起作用。如果您需要EF在現有數據庫中創建表格,則必須創建custom database initializer

相關問題