4

我試圖將我的應用程序部署到測試環境,但無法讓實體框架與數據庫很好地配合。在開發過程中,我使用數據庫初始化程序爲數據庫創建種子,並且工作完美無瑕。但是,當我將應用程序部署到實際的IIS實例時,我無法使其與數據庫接口。我的自定義初始化規則根本沒有運行,所以我改爲手動創建數據庫。爲什麼我的實體框架代碼第一個DbContext沒有顯示我填充表中的實體?

我使用ObjectContext.CreateDatabaseScript()作爲我的SQL腳本的起點,並且SSMS驗證在適當的表中填充了兩行。

運行應用程序後出現問題。我有自定義成員資格和角色提供者,這兩者似乎都沒有檢測到數據庫中存在兩種角色。

如何讓我的實體框架認識到這些行不是空的?我目前在存儲庫中使用私有DbContext來處理與實體框架的通信,並禁用了我的自定義初始值設定項,直到解決了這個問題。試圖在數據庫中找到角色

代碼:

context.Roles.Single(r => r.Name == role) 

的數據庫顯示在角色表如下:

Id Name  Description 
1 Company NULL 
2 Customer NULL 

的LINQ生成一個空序列例外,因爲context.Roles是空的。

+0

可能看起來像一個明顯的一點,但你有沒有明確設置你的web.config中的應用服務的連接字符串?在本地開發機器上,由於通過sqlserver express數據庫的配置方面的約定,按照dbcontext名稱等等,所有的都會好的。 – 2012-02-17 17:02:15

+0

@jimtollan指定了一個連接字符串。 – XBigTK13X 2012-02-17 17:09:51

+0

好的 - 這有助於縮小它..會回來一點。如果你查詢:'context.Roles.All()'(或者你的包裝器對All())所需要的任何東西 - 剛剛看到你提到了context.Roles是空的! - 忽略我的評論 – 2012-02-17 17:10:50

回答

0

下面是我通過自定義IDatabaseInitializer實現從代碼第一個項目遷移到將數據庫重置爲非易失性數據庫設置的步驟。

首先,複製實體框架在您的開發中生成的模式。項目通過運行以下代碼並將輸出放置在可訪問的位置(即:桌面上的文件,瀏覽器中的原始文本等)。 方面是你的類的實例,從的DbContext繼承:

((IObjectContextAdapter)context).ObjectContext.CreateDatabaseScript() 

其次,從保存在一個SQL文件調用返回的字符串。一定要刪除創建實體框架元數據表的命令。此命令應該類似於以下內容:

create table [dbo].[EdmMetadata] 
( 
    [Id] [int] not null identity, 
    [ModelHash] [nvarchar](max) null, 
    primary key ([Id]) 
); 

接下來,刪除播種數據庫的代碼。我使用了AppSetting,這樣我可以輕鬆地在部署後切換代碼的​​使用情況,而無需重新編譯和部署。

if (ConfigurationManager.AppSettings["Mode"] == "Dev") 
{ 
    Database.SetInitializer<PonosContext>(new PonosInitializer()); 
    new MyContext().Database.Initialize(true); 
} 

緊隨該聲明之外,你還需要並初始化數據庫,但要確保在通過,使得如果數據庫尚未初始化初始化纔會發生。

new MyContext().Database.Initialize(false); 

最後,在空數據庫上運行您的安裝程序SQL以使用適當的字段創建表。

如果您部署並運行您的應用程序,它應該連接到數據庫,並且能夠正常處理您在外部腳本中加載的任何數據。我用自定義成員資格和角色提供程序成功測試了此方法

0

根據評論判斷,Entity Framework與數據庫之間沒有任何關聯。你沒有提到你使用的是哪個版本的實體框架,但我認爲你已經更新到最新版本(寫作時間爲4.3)。

我注意到你說你是「手動創建數據庫」。爲什麼不打開測試項目並基於手動創建的數據庫創建新的數據庫優先模型?這至少應該證實你可以在你的配置中使用Entity Framework。 從那裏我會從頭創建另一個項目來測試代碼優先的方法。

+0

我設置了一個新的應用程序,它使用數據庫第一種方法和我手動創建的數據庫。從數據庫中正確檢索角色。但是,有關此問題的應用程序中的代碼優先方法不能成功檢索角色。 – XBigTK13X 2012-02-17 19:41:17

相關問題