从实体框架生成用于数据迁移的可用sql
目前,我正在尝试构建一个控制台应用程序,在这个应用程序中,我可以向数据库中插入一些数据,并将sql作为额外数据输出到一个文件中。我的想法是,我可以将其用于数据迁移或类似的事情 我有几个查找表,我想预先填充数据,我认为这比手工编写sql要好。如果有人需要查找一个值,它就会出现在代码中 我使用的是,到目前为止,我所得到的允许我通过执行以下操作来记录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
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中
- 右键单击数据库
- 单击生成脚本李>
- 选择您的表格李>
- 在下一个屏幕上,选择高级选项
- 在“要编写脚本的数据类型”中,选择“仅数据”。(或架构和数据,视情况而定)
- 继续到向导的结尾
- 成功