【问题标题】:EF5 create database in .\sqlexpress instead localdb?EF5 在 .\sqlexpress 中创建数据库而不是 localdb?
【发布时间】:2013-11-19 12:42:18
【问题描述】:

我在我的项目中使用 EF5(代码优先)和 VS2012。

我尝试使用迁移在 LocalDb 中创建表。

  1. 启用迁移
  2. 添加-迁移 m1
  3. Ubdate-数据库

每次我发现我的表不是在 LocalDb 中而是在 sqlexpress 中时,虽然我像这样创建 ConnectionString:

    <add name="StihlDbContext" connectionString="Server=(localdb)\v11.0;Initial    Catalog=StihlDb;Integrated Security=True" providerName="System.Data.SqlClient" />                               

我不明白为什么 EF 在 .\SQLEXPRESS 而不是在 LocalDb 中创建数据库

【问题讨论】:

标签: asp.net entity-framework ef-code-first code-first entity-framework-migrations


【解决方案1】:

我怀疑您遇到了默认迁移器的一个小问题 - 它不是迁移实际数据库,而是使用无参数构造函数创建上下文的新实例。如果碰巧在另一个程序集中有上下文类并且没有本地配置,则将使用默认连接字符串。

解决方法:在定义上下文的项目中创建本地 app.config 文件。复制相同的连接字符串,以便在创建上下文的新实例时使用连接字符串。这可能会起作用。

请记住,您不必从 Visual Studio 中迁移。相反,如果您只是运行创建上下文的应用程序并设置迁移器

Database.SetInitializer( new MigrateDatabaseToLatestVersion<StihlDbContext, Configuration>() );

数据库将在首次使用时自动迁移。这比手动更新方便多了。

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题。如果您有机会在类库中安装了EntityFramework,那么您需要将类库设置为启动项目。否则将找不到位于程序集中的 app.config 中的连接字符串,并且您的 DbContext 实例构造函数将没有参数。

    这意味着当您在包管理器控制台中运行 update-database 命令时,数据库将在默认数据库服务器中创建或更新,在您的情况下是 .\SQLExpress

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多