脚本生成正确,我使用多个层,因此以下命令将运行到程序包管理器控制台
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命令更新了错误的数据库。
答案 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都会构建所有内容。
我没有解释为什么会发生这种情况,但这是我们的原因和解决方案。