2013-09-24 74 views
0

我使用實體框架的代碼優先方法創建表,我需要檢查是否有在數據庫中,我需要刪除的任何實體:檢查表已經在代碼中創建第一個方法

class MyDocument 
{ 
    public string Id { get; set; } 
    public string Text { get; set; } 
} 

class MyContext : DbContext 
{ 
    public DbSet<MyDocument> Documents { get; set; } 
} 


using (var data = new MyContext()) 
{ 
    var present = from d in data.Documents 
        where d.Id == "some id" || d.Id == "other id" 
        select d; 
    // delete above documents 
} 

在第一次運行,在沒有桌子然而,LINQ表達上述拋出一個異常:

Invalid object name 'dbo.Documents' 

我如何檢查表是存在的,如果不是,則設置present爲空集, 也許?或者,也許有一種方法可以在發出LINQ查詢之前強制創建數據庫/表格?

回答

0

EF實際上會根據它所連接的數據庫檢查整個上下文。 數據庫可以有更多的上下文。但不能少。 所以實際上你檢查

Context.Database.CreateIfNotExists(); 

如果DB和背景不匹配,並且使用的是自動遷移,那麼你得到的特定對象錯誤。但就EF如何處理數據庫比較而言,這可能會產生誤導。

你當然可以嘗試和訪問上下文中的每個DBSet 不知道這是多麼有用。

EF代碼首先支持遷移,無論是自動還是按需。

參見EF Code first migrations

Database.SetInitializer 

使用SetInitializer命令打開例如自動遷移。

該鏈接將提供更多有關用於高級db處理的db遷移的手動/受控方法的信息。更簡單的自動方法,也在鏈接中描述。