1

我想在構建應用程序時測試多種方法(數據庫優先,模型優先,代碼優先)。在使用T4Scaffolding並且在DB修改後有很多問題之後,我通過EF沒有足夠的靈活性。現在我發現了一件非常奇怪的事情。我留下了一個在Web.Config中指定的'DefaultConnection',並指向解決方案的App_Data文件夾中的單個.mdf文件。使用代碼優先的方法,我創建了我的實體(類),然後是腳手架存儲庫,上下文,一切似乎都工作得很好,除非我在刪除和更新數據庫之前就已經存儲了數據。但是,在VS Server Explorer中檢查之後,數據庫僅包含用於Identity(用戶,角色)的表,這表明實際的數據庫位於其他位置。我懷疑它位於'C:\ Users {MyUser} \ AppData \ Local \ Microsoft \ Microsoft SQL Server本地數據庫\實例'。但是我不能打開.mdf文件來檢查,因爲它們已經被使用了。我被卡住了。我的數據在哪裏?LocalDB數據庫存儲在哪裏?

忘了提及我在我的應用程序中有兩個上下文,因此我在PM控制檯收到警告:「在程序集中找到了多個上下文類型...」。

Howerver,第一個是「ApplicationDbContext」,它僅涉及身份DB:

public class ApplicationUser : IdentityUser 
{ 
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 
} 

和第二上下文被綁定到由該Web.Config中單個DB連接,並且它具有業務邏輯實體

+0

如果您想打開MS服務器使用的.mdf,請首先關閉服務中的SQL服務器服務。此外,打開Management Studio並查看db的屬性,您可以找到存儲mdf的位置 – apomene

+0

但是當我說'打開'時,我的意思是在服務器資源管理器中打開,該服務器資源管理器使用SQL連接,該服務器無法與服務器停止建立 –

+0

服務器資源管理器?...你指的是哪個客戶端程序? – apomene

回答

1

這有點奇怪。連接字符串是從Web.Config中選取的,它必須在那裏。請重新檢查。默認情況下,EF在App_Data文件夾中創建一個數據庫。所以你可以搜索那個文件夾。此外,如果你發現使用多個上下文感到不舒服,你可以簡單地將所有的DbSets複製到ApplicationDbContext中,它應該可以正常工作。

編輯: 您可以爲您喜歡的其他方面指定了相同的CS:

namespace MvcProject 
{  
    public class NorthwindDb : DbContext  
    {   
     public NorthwindDb() : 
      base("DefaultConnection") {} 
    } 
} 

這裏同時呼籲基類的構造函數中,我們可以通過連接字符串的名稱。默認情況下,Identity使用DefaultConnection,我們可以將其設置爲我們的上下文。

+0

我確實檢查過,但沒有新的東西。來自App_Data的數據庫文件與服務器資源管理器中的相同,並且是唯一一個來自Web.Config。整個解決方案中沒有其他connectionString屬性。但該數據庫文件只有Identity表。 –

+0

嘗試更改您的其他上下文連接字符串以指向DefaultConnection。 –

+0

但是,如果不在Web.Config中,指定上下文的連接字符串在哪裏? –