实体框架 - 更新 - 数据库 - 不创建数据库

时间:2014-02-17 03:58:59

标签: asp.net-mvc entity-framework-5

Visual Studio 2013

我正在尝试在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; }
    }
}

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

运行启用迁移时,它说我有两个[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" }
            );
    }

编辑 - 来自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&GT;更新数据库 指定'-Verbose'标志以查看应用于目标数据库的SQL语句。 没有待定的基于代码的迁移。 运行种子方法。 PM&GT;

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

3 个答案:

答案 0 :(得分:4)

您可以从Web.config提供连接字符串吗? 此外,是否存在与连接字符串相同的数据连接(服务器资源管理器 - &gt;数据连接)?

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

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

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

答案 1 :(得分:0)

我注意到您以正确的方式启用了迁移,请运行: 添加迁移“给它起个名字”? 完成此操作后,您将在迁移文件夹中看到一个新文件。 你无法在不创建新迁移的情况下更新数据库。

答案 2 :(得分: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

在我的情况下,问题似乎是我已经拥有该名称的数据库表。大约一个月前我曾经参加过这个教程,但是被打断了,不得不中止。即使我删除了整个Project,似乎也可能保留了数据库表名。

我说似乎是,因为问题在以下解决方案中消失了:在第二次删除项目之后,我在每个相关情况下都小心地将'Contoso'替换为'ContosoUniversity'。

在问题解决之前,我在尝试更新数据库时,在程序包管理器控制台中反复收到(0x80131904错误),并注意到mdf文件无法连接到数据库。但是,当我检查相应的目录时,甚至没有创建mdf文件。

仅供参考。对于在Visual Studio 2012中开始使用MVC,我建议在上面的MVC教程之前完成以下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项目,我就无法调试该问题。

相关问题