2

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

例如。当我将电子邮件列添加到表中时:“所有者”

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 中的连接字符串是:

<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 命令,更新了错误的数据库。

4

3 回答 3

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"

解决了我的问题。

于 2012-03-08T11:05:59.700 回答
0

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

<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>
于 2012-03-08T19:53:57.460 回答
0

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

对此进行扩展:

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

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

因此,如果定义了 AltDb 构建变量,它将使用名为 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 似乎都会构建所有内容。

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

于 2014-12-27T22:55:21.333 回答