2014-02-17 118 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项目,我无法调试该问题。