Entity Framework -Update-Database- 不创建数据库

bar*_*own 4 asp.net-mvc entity-framework-5

视觉工作室 2013

我正在尝试在 PluralSight 学习 asp.net MVC。我创建了一个名为 eManagr.Domain 的项目(dll),其中包含以下类:Department / Employee / IDepartmentDatasource

部门.cs

public class Department
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<Employee> Employees { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

员工.cs

public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

部门数据源

public interface IDepartmentDataSource
{
    IQueryable<Employee> Employees { get; }
    IQueryable<Department> Departments { get; }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下文件创建了一个基础结构文件夹: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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我在项目创建期间使用 MVC 4 创建了另一个项目,称为 eManager.Web 和 Internet 模板。

运行 Enable-Migration 时,它说我有两个 [eWeb.Domain , eWeb.Model.Users] 然后我用以下命令告诉它 Enable-Migration:

Enable-Migration -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" }
            );
    }
Run Code Online (Sandbox Code Playgroud)

编辑——来自 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" />
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时,我得到以下响应: PM> update-database 指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。没有挂起的基于代码的迁移。运行种子方法。下午>

运行后,我想在我的 App_Data 中看到一个数据库文件,但它不存在,当我使用 SQL Server 对象资源管理器时,即使这是我想要做的,也没有创建数据库。

Nur*_*yev 5

你能从 Web.config 提供你的连接字符串吗?另外,是否有与您的连接字符串名称相同的数据连接(服务器资源管理器 -> 数据连接)?

我认为,向 DepartmentDb 上下文类添加无参数构造函数可以解决您的问题

public DepartmentDb ()
        : base("name=DefaultConnection")
Run Code Online (Sandbox Code Playgroud)

其中 name=DefaultConnection 必须是您的连接字符串名称