Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能以某种方式使用EntityFramework核心在C#中生成SQL Insert语句(作为普通字符串)? 问题/情况_C#_Sql_Entity Framework Core - Fatal编程技术网

是否有可能以某种方式使用EntityFramework核心在C#中生成SQL Insert语句(作为普通字符串)? 问题/情况

是否有可能以某种方式使用EntityFramework核心在C#中生成SQL Insert语句(作为普通字符串)? 问题/情况,c#,sql,entity-framework-core,C#,Sql,Entity Framework Core,我有非常复杂的对象(有二进制字段,巨大的文本,…),我用efcore从数据库中读取。对于这些对象,我尝试生成insert语句(纯字符串文本)以将它们保存在某个文件中,并稍后在不同的数据库上执行 我有一个用C#编写的自定义insert语句生成器,但我必须实现每种可能的字段/数据类型,当然它是不完整和错误的。此外,我还需要以某种方式手动组合记录,以避免对每条记录执行INSERT语句,而是使用多个值执行一次INSERT 所以我真的很想使用一些库来完成这个任务,或者理想的EntityFramework,

我有非常复杂的对象(有二进制字段,巨大的文本,…),我用efcore从数据库中读取。对于这些对象,我尝试生成insert语句(纯字符串文本)以将它们保存在某个文件中,并稍后在不同的数据库上执行

我有一个用C#编写的自定义insert语句生成器,但我必须实现每种可能的字段/数据类型,当然它是不完整和错误的。此外,我还需要以某种方式手动组合记录,以避免对每条记录执行INSERT语句,而是使用多个值执行一次INSERT

所以我真的很想使用一些库来完成这个任务,或者理想的EntityFramework,因为我已经使用它从数据库中读取对象了

我需要什么
一些库(或EntityFramework中的功能),我可以只传递一些对象并接收这些对象的相应INSERT语句。

据我所知,从查询生成SQL的EF核心方法主要是内部的,并且依赖于实现(并且取决于提供程序:请记住,EF Core与特定数据库或SQL语言没有直接关系)…例如,这里有一种方法(使用反射)用于2.1:但不直接用于3.0预览版本(因为内部类和私有字段已更改)


但是,当您调用
SaveChanges
时,EF Core会记录生成的SQL(使用DI上定义的LoggerFactory,如果可用,或者您实际上可以手动注入LoggerFactory),因此您可以定制
ILogger
实现,以获取输出(并对其进行解析,以便知道它是SQL语句)并将其保存到外部文件中,然后将实体插入到连接到虚拟数据库的DbContext中(使用与实际数据库相同的提供程序,稍后将在实际数据库中执行这些insert语句).

可能正在处理dataset和ado.Net commandbuilder选项?thx for hint@AlexanderPowolozki!最大的限制是我需要先指定SelectCommand,然后再次连接到数据库。根据文档:DbCommandBuilder必须执行SelectCommand才能返回构造INSERT、UPDATE和DELETE SQL命令所需的元数据。因此,需要额外访问数据源,这可能会影响性能。“此外,我也不是100%相信我能够按照我希望的那样操作数据集,但让我们看看。