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

これらを切り替えるためにビルド構成に構成変数を保存し、この問題に遭遇しました。解決策は、Clean してから明示的に Build することでした。

それを拡張するには:

私たちの Db クラス (DbContext を継承するクラス) には、次のようなコンストラクターがあります。

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

そのため、AltDb ビルド変数が定義されている場合、AltDb という名前の ConnectionString が使用されます。それ以外の場合は、Db という名前のものを使用します。プロジェクト構成には、AltDb という名前のものがあり、AltDb ビルド変数を定義するだけです。

したがって、これらの 2 つの接続文字列が Web.Config で定義されています。

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

したがって、代替データベースを更新する場合は、ビルド構成を切り替えて update-database を実行するだけでよいはずです。これは何年にもわたってすべてのプロジェクトで機能してきましたが、今日ではそうではありません。

クリーンを実行したとき、このビルド構成が選択され、スタートアップ プロジェクトが選択されていることを確認し、明示的にビルドすると、魔法のように解決されました - update-database を実行するたびに EF がすべてをビルドするように見えますが。

なぜこれが起こるのか説明はありませんが、それが原因であり解決策です。

于 2014-12-27T22:55:21.333 に答える