0

現在、データベースにデータを挿入し、追加としてSQLをファイルに出力できるコンソールアプリを構築しようとして、少し混乱しています。アイデアは、これらをデータの移行などに使用できるということです。

データを事前に入力したいルックアップテーブルがいくつかありますが、これは手動でSQLを書き出すよりも優れていると思います。誰かが値を検索する必要がある場合、それはコード内にあります。

私はEF Tracingを使用していますが、これまでに得たものにより、次のようにしてSQLエンティティフレームワークの作成をログに記録できます

私は追跡にアクセスするために彼らの行動に夢中になりました

private void WriteSqlToString(CommandExecutionEventArgs args)
{
    sqlTrace.Append(args.ToTraceString());
}

これはこのようなものを与えます

insert [dbo].[Members]([EmailAddress], [FirstName], [LastName])
values (@0, @1, @2)
select [Id]
from [dbo].[Members]
where @@ROWCOUNT > 0 and [Id] = scope_identity()
-- @0 (dbtype=String, size=60, direction=Input) = "email@email.com"
-- @1 (dbtype=String, size=-1, direction=Input) = "TestFirstName"
-- @2 (dbtype=String, size=-1, direction=Input) = "TestLastName"

手でSQLを書くのが苦手なので、最初に手を挙げます。これを少しいじって、sqlserver Expressで実行しようとしましたが、変数が宣言されていないため、エラーが発生し続けます。

これを機能させるために努力し続ける価値があると人々は考えていますか、それとも私はここでより良い解決策を見逃していますか?


参照用のコードの一部を次に示します

public void CreateSqlFile()
{
    using (MyContext context = tracingContextFactory.Create(WriteSqlToString))
    {
        Migrate(context);
        context.SaveChanges();
    }

    StreamWriter file = new StreamWriter(migrationPath);
    file.WriteLine(sqlTrace.ToString());
    file.Close();
}
4

1 に答える 1

1

EF から生成された SQL は機能しますが、通常は非常に複雑で、形式も適切ではありません。

誰も SQL を見たことがないので、EF にとってはこれで問題ありません。

ただし、SQL を使用または変更しようとする場合は、別の方法を使用します。たとえば、データ移行を行おうとしている場合は、SQL Server Integration Services (SSIS) を検討します。

編集

サーバー間で転送するデータを生成するには、SQL Server Management Studio で、

  • データベースを右クリックし、
  • [スクリプトの生成] をクリックします。
  • テーブルを選択します。
  • 次の画面で、[詳細オプション] を選択します
  • 「スクリプトを作成するデータの種類」で、「データのみ」を選択します。(または必要に応じてスキーマとデータ)
  • ウィザードの最後まで続行する
  • 成功。
于 2013-10-13T15:23:43.627 に答える