从实体框架生成用于数据迁移的可用sql

从实体框架生成用于数据迁移的可用sql,sql,sql-server-2008,entity-framework,entity-framework-5,database-migration,Sql,Sql Server 2008,Entity Framework,Entity Framework 5,Database Migration,目前,我正在尝试构建一个控制台应用程序,在这个应用程序中,我可以向数据库中插入一些数据,并将sql作为额外数据输出到一个文件中。我的想法是,我可以将其用于数据迁移或类似的事情 我有几个查找表,我想预先填充数据,我认为这比手工编写sql要好。如果有人需要查找一个值,它就会出现在代码中 我使用的是,到目前为止,我所得到的允许我通过执行以下操作来记录sql实体框架创建的日志 我已经加入到他们的行动中去了 private void WriteSqlToString(CommandExecutionEve

目前,我正在尝试构建一个控制台应用程序,在这个应用程序中,我可以向数据库中插入一些数据,并将sql作为额外数据输出到一个文件中。我的想法是,我可以将其用于数据迁移或类似的事情

我有几个查找表,我想预先填充数据,我认为这比手工编写sql要好。如果有人需要查找一个值,它就会出现在代码中

我使用的是,到目前为止,我所得到的允许我通过执行以下操作来记录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。我把这件事搞砸了,试图让它在SQLServerExpress中执行,但由于没有声明变量,所以不断出现错误

人们是否认为值得继续努力让它发挥作用,还是我错过了一个更好的解决方案


这里有更多的代码供参考

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

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

从EF生成的SQL是功能性的,但通常过于复杂且格式不正确

对于EF来说,这很好,因为从来没有人看到过SQL

但是,如果您打算使用或试图修改SQL,我会选择另一种方法。例如,如果您正在尝试进行数据迁移,我将研究SQL Server集成服务(SSI)

编辑

要生成要在服务器之间传输的数据,请在SQL Server management studio中

  • 右键单击数据库
  • 单击生成脚本
  • 选择您的表格
  • 在下一个屏幕上,选择高级选项
  • 在“要编写脚本的数据类型”中,选择“仅数据”。(或架构和数据,视情况而定)
  • 继续到向导的结尾
  • 成功

我只对它的功能感兴趣。例如,我有一个包含200个条目的查找表。我希望能够在代码中定义它,然后将sql输出到一个文件中,该文件将作为数据库迁移的一部分运行,而不是在sql中输入。我怀疑很多人会读到它。谢谢,这是一个很好的解决方案,只是遗憾它不可能真的是automated@Neil它可以,如果你愿意的话。。。如果你想成为一名程序员,学习如何编写sql是值得的。我听过这本书的一些好东西,在10分钟内自学SQL。我对SQL的了解相当不错,但从日常生活来看,我会说我可能每6个月写一次。这只是一个数据输入的例子,为什么不尝试编写一个程序,这样我就不必编写sql,也不必让它通过编译器的验证和EF的内置数据验证(由属性提供)?此外,还增加了适当的智能感知功能。但是,嘿,如果手动数据输入是你的事情,那就去做吧。