【问题标题】:Debug EF Code First database generation调试 EF Code First 数据库生成
【发布时间】:2012-03-15 21:23:36
【问题描述】:

我想知道是否有某种方法可以调试 ASP.NET MVC 3 应用程序的数据库生成。我遇到了一些问题:数据库没有创建,我没有错误信息。

更新

这是我的连接字符串:

  <connectionStrings>
    <add name="SmartRent.Models.AdContext"  connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

这是我的 Global.asax.cs

protected void Application_Start()
{
    System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseAlways<SmartRent.Models.AdContext>());
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

这是我的 EF 数据上下文:

namespace SmartRent.Models
{
    public class AdContext : DbContext
    {
        public DbSet<Ad> Ads { get; set; }

        public DbSet<CraneLocation> CraneLocations { get; set; }
    }
}

【问题讨论】:

  • 什么样的异常?我在迁移时遇到了意外错误的随机问题。它通过在迁移时引用 -StartUpProjectName 标志来解决
  • 也不例外。 Web 应用程序只是启动,但没有创建数据库。
  • 您应该在包管理器控制台中运行 Update-database 命令来创建它。它与编译无关
  • 你确定是丹尼斯吗?我必须在哪里触发该命令?
  • 这对我来说看起来很有趣:connectionString="Data Source=.\SQLEXPRESS; - 更专业的人可以说,你能在没有实例名称的情况下连接到 sqlexpress 吗?

标签: asp.net-mvc sql-server-2008 ef-code-first


【解决方案1】:
  1. 运行我完成的教程http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part1-cs
  2. 我的代码可以正常工作,因此请修改我的代码/您的代码,直到它中断/工作为止。

解决此类问题的最佳方法是使用 SQL 分析器。尝试先用我的代码重现。

【讨论】:

    【解决方案2】:

    仅从 Code First 的角度来看...
    这可能会帮助你Entity Framework 4.3 doesn't create database
    而且您必须使用 PM 控制台,没有其他方法可以解决问题(这是实际“调试”正在发生的事情的最佳方法)。
    PM 控制台中的每一步都必须成功 - 没有例外,还请阅读 cmets,因为它们经常告诉您可能出了什么问题。
    您还可以运行 Update-Database -Script 以了解正在创建的内容(在实际创建之前)。
    SQLExpress 是默认设置(我认为),因此您可以删除连接字符串来测试不指定连接的内容。
    简而言之,与此相关的一些一致性以及玩/理解 PM 控制台有助于我控制事物,也可能对您有所帮助。
    还手动删除以前创建的 Db-s(如果有的话,通过 Code First),删除迁移(如果存在),重新编译然后重新运行,所以通常的调试技术:)。

    【讨论】:

      【解决方案3】:

      见:Debugging Package Manager Console Update-Database Seed Method

      摘自答案

      if (System.Diagnostics.Debugger.IsAttached == false)
        System.Diagnostics.Debugger.Launch();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多