EF5在。\ sqlexpress中创建数据库而不是localdb?

时间:2013-11-19 12:42:18

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

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

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

  1. 启用 - 迁移
  2. Add-Migration m1
  3. Ubdate-Database
  4. 每次我发现我的表不是在LocalDb中而是在sqlexpress中,虽然我创建了这样的ConnectionString:

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

    我不明白为什么EF在。\ SQLEXPRESS中创建数据库但在LocalDb中没有

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:0)

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

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