2014-02-17 52 views
1

Visual Studio 2013實體框架-Update-Database-不創建數據庫

我想學習在PluralSight的asp.net MVC。我創建了一個名爲eManagr.Domain與下面的類項目(DLL): 部門/員工/ IDepartmentDatasource

Department.cs

public class Department 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual ICollection<Employee> Employees { get; set; } 
} 

Employee.cs

public class Employee 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

IDepartmentDataSource

public interface IDepartmentDataSource 
{ 
    IQueryable<Employee> Employees { get; } 
    IQueryable<Department> Departments { get; } 
} 

我創建了一個基礎結構文件夾具有下列文件:DepartmentDb.cs

public class DepartmentDb : DbContext, IDepartmentDataSource 
{ 
    public DbSet<Employee> Employees {get; set;} 
    public DbSet<Department> Departments {get; set;} 

    IQueryable<Employee> IDepartmentDataSource.Employees 
    { 
     get { return Employees; } 
    } 

    IQueryable<Department> IDepartmentDataSource.Departments 
    { 
     get { return Departments; } 
    } 
} 

我然後創建使用MVC 4的另一個項目創建項目的過程中調用eManager.Web互聯網模板。

當運行啓用遷移,它說我有兩個[eWeb.Domain,eWeb.Model.Users]然後我告訴它允許遷移使用以下命令:

啓用遷移-ContextTypeName DepartmentDb

這產生遷移文件夾和被叫Configurations.cs

public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(eManager.Web.Infrastructure.DepartmentDb context) 
    { 
     context.Departments.AddOrUpdate(t => t.Name, 
      new Department() { Name="Engineering"}, 
      new Department() { Name = "Sales" }, 
      new Department() { Name = "Shipping" }, 
      new Department() { Name = "HR" } 
      ); 
    } 

EDIT文件 - 連接字符串從程序Web.Config -

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-eManager.Web-20140216202751;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-eManager.Web-20140216202751.mdf" providerName="System.Data.SqlClient" /> 

當我運行下面的我得到如下的回覆: PM>更新數據庫 指定「-Verbose」標誌,查看被應用到目標數據庫的SQL語句。 沒有待處理的基於代碼的遷移。 運行種子法。 PM>

運行後,我想在我的App_Data中看到一個數據庫文件,但它不存在,並且當我使用SQL Server對象資源管理器時,即使這是我正在嘗試執行的操作,也不會創建數據庫。

回答

4

你能提供你的連接字符串從Web.config嗎? 另外,是否有一個數據連接(服務器資源管理器 - >數據連接)命名爲您的連接字符串相同?

我認爲,加入一個參數的構造函數,以您的DepartmentDb上下文類可以解決你的問題

public DepartmentDb() 
     : base("name=DefaultConnection") 

其中name = DefaultConnection必須是您的連接字符串名稱

+0

謝謝..我砰的一聲,很簡單。我正在做的是基於我正在遵循的教程,並且這個人正在做它沒有在他的班級中的連接字符串,但它在他的實例工作。 – barakisbrown

0

我注意到,在您啓動以正確的方式遷移,你運行: 添加遷移「給它一個名字」? 一旦完成,您將注意到migrations文件夾中有一個新文件。 您無法更新數據庫,無法創建新的遷移。

0

我剛碰到類似的東西。我遇到它時,我會通過以下ASP.NET MVC教程: https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

在我的情況下,這個問題似乎是我已經有該名稱的數據庫表。大約一個月前,我已經完成了部分教程,但被中斷,不得不中止。儘管我刪除了整個項目,但似乎數據庫表名可能已被保留。

我說好像是因爲問題消失了,採用了以下解決方案:在第二次刪除項目後,我在每個相關情況下都仔細地將「Contoso」替換爲「ContosoUniversity」。

在問題解決之前,當試圖更新數據庫時,我反覆在軟件包管理器控制檯中發現(0x80131904錯誤),並且發現mdf文件無法連接到數據庫。但是,當我檢查合適的目錄時,mdf文件甚至沒有被創建。

供參考對於在Visual Studio 2012中開始MVC-ers,我建議在上面的之前通過以下MVC教程。 https://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 通過該鏈接也可以使用MVC5 Visual Studio 2013版本。 第一段教程做了一些跳躍...

如果我已經開始使用EF5教程作爲我的第一個MVC項目,我無法調試該問題。