迁移(实体框架4.3) - 脚本不会被执行

时间:2012-03-08 09:55:04

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

脚本生成正确,我使用多个层,因此以下命令将运行到程序包管理器控制台

EG。当我向表格添加电子邮件列时:“所有者”

Add-Migration AddEmailToOwner -StartupProjectName "FacturatieMVCv2.Data" -Verbose

- >结果:

Using NuGet project 'FacturatieMVCv2.Data'.
Target database is: 'FacturatieMVCv2.Data.Website.MyResellerContext' (DataSource: V-File   \SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).

我使用的下一个命令是:

Update-Database -StartupProjectName "FacturatieMVCv2.Data" -Verbose

- >结果:

Using NuGet project 'FacturatieMVCv2.Data'.
Target database is: 'FacturatieMVCv2.Data.Website.MyResellerContext' (DataSource: V-FILE\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
Applying explicit migrations: [201203080906140_AddDamnToOwner].
Applying explicit migration: 201203080906140_AddDamnToOwner.
ALTER TABLE [Owners] ADD [Damn] [nvarchar](max)
[Inserting migration history record]

App.Config中的我的connectionstring是:

<parameter value="Server=V-FILE\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=sa;password=n*****3;" />

虽然我指定了初始目录,但它的目标是错误的目录。它创建/更新了名为:FacturatieMVCv2.Data.Website.MyResellerContext的数据库表。

以下是我的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
        <!--<parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />-->
        <parameter  value="Server=V-FILE02\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=sa;password=12345678;" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
    </configuration>

简而言之,Update-Database命令更新了错误的数据库。

3 个答案:

答案 0 :(得分:1)

使用以下命令:

Update-Database -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=V-FILE\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=mydbuser;password=mydbpass;" -ConnectionProviderName "System.Data.SqlClient"

解决了我的问题。

答案 1 :(得分:0)

SqlConnectionFactory将初始目录添加到您提供的值中。如果要为上下文使用特定的连接字符串,则应在connectionStrings部分添加条目。 E.g。

<connectionStrings>
  <add name="MyResellerContext" connectionString="Server=V-FILE\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=sa;password=12345678;" providerName="System.Data.SqlClient" />
</connectionStrings>

答案 2 :(得分:0)

我们在构建配置中存储配置变量以在这些之间切换并遇到此问题;解决方案是清理然后显式构建。

扩展:

我们的Db类(继承DbContext的类)有一个构造函数,如:

    public Db()
#if AltDb
        : base("AltDb")
#else
        : base("Db")
#endif
    {
    }       

因此,如果定义了AltDb build var,它将使用名为AltDb的ConnectionString;否则它使用名为Db的那个。在我们的项目配置中,我们有一个名为AltDb,它所做的就是定义AltDb构建变量。

所以我们在Web.Config中定义了这两个连接字符串:

<connectionStrings>
    <add name="Db" connectionString="Initial Catalog=MyProj;Data Source=.\SQLEXPRESS...
    <add name="AltDb" connectionString="Initial Catalog=Staging;Data Source...

因此,当我们想要更新备用数据库时,我们应该只能切换构建配置并运行update-database。这在多年来的每个项目中都有效,但今天它不会。

当我运行Clean时,确保选择了这个构建配置并选择了启动项目,并明确构建,神奇地它已经解决了 - 即使每次运行update-database时EF都会构建所有内容。

我没有解释为什么会发生这种情况,但这是我们的原因和解决方案。