現在、データベースにデータを挿入し、追加として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();
}