【问题标题】:Entity Framework -Update-Database- Does not create DatabaseEntity Framework -Update-Database- 不创建数据库
【发布时间】:2016-10-19 05:17:58
【问题描述】:

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; }
}

部门数据源

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 的 MVC 4 创建了另一个项目,其中包含 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" }
            );
    }

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 语句。 没有挂起的基于代码的迁移。 运行种子方法。 下午>

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢 .. 我在敲我的头,这很简单。我正在做的是基于我正在关注的教程,而这个人正在做的事情在他的课堂上没有连接字符串,但它在他的实例上工作。
    【解决方案2】:

    我注意到您以正确的方式启用了迁移,您是否运行过: 添加迁移“给它一个名字”? 完成此操作后,您会注意到迁移文件夹中有一个新文件。 如果不创建新迁移,您将无法更新数据库。

    【讨论】:

      【解决方案3】:

      我刚刚遇到了非常相似的事情。我在阅读以下 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-error),并提示 mdf 文件无法连接到数据库。但是,当我检查适当的目录时,甚至没有创建 mdf 文件。

      仅供参考 对于 Visual Studio 2012 中的 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 项目,我将无法调试该问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 2017-10-04
        • 1970-01-01
        相关资源
        最近更新 更多