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 可以正常工作,但通常过于复杂且格式错误。

这对 EF 来说很好,因为没有人见过 SQL。

但是,如果您要使用或尝试修改 SQL,我会选择不同的路线。例如,如果您尝试进行数据迁移,我会查看 SQL Server Integration Services (SSIS)。

编辑

要生成数据以在服务器之间传输,在 SQL Server 管理工作室中,

  • 右键单击数据库,
  • 单击生成脚本。
  • 选择您的表。
  • 在下一个屏幕上,选择高级选项
  • 在“脚本的数据类型”中,选择“仅数据”。(或架构和数据,视情况而定)
  • 继续到向导结束
  • 成功。
于 2013-10-13T15:23:43.627 回答