c# - 是否可以使用 EntityFramework Core 在 C# 中以某种方式生成 SQL 插入语句(作为纯字符串)?
问题描述
问题/情况
我有相当复杂的对象(带有二进制字段、巨大的文本等),我使用 EF Core 从数据库中读取这些对象。对于这些对象,我尝试生成插入语句(纯字符串文本)以将它们保存在某个文件中并稍后在不同的数据库上执行。
我有一个用 C# 编写的自定义插入语句创建器,但我必须实现每个可能的字段/数据类型,当然它是不完整的和错误的。此外,我需要以某种方式手动组合记录,以避免为每条记录执行一个 INSERT 语句,而是一个带有多个 VALUES 的 INSERT。
所以我真的很想使用一些库来完成这项任务,或者理想情况下是 EntityFramework,因为我已经使用它从数据库中读取对象。
我需要的
一些库(或 EntityFramework 中的功能),我可以只传递一些对象并接收该对象的相应 INSERT 语句。
解决方案
据我所知,从查询生成 SQL 的 EF Core 方法大多是内部的并且依赖于实现(并且取决于提供者:请记住,EF Core 与特定数据库或 SQL 语言没有直接关系)。 .. 例如,这里有 2.1 的一种方法(使用反射):https ://stackoverflow.com/a/44180537/68972但不能直接在 3.0 预览版上工作(因为内部类和私有字段已更改)。
但是,EF Core 确实会在您调用时记录生成的 SQL(使用 DI 上定义的 LoggerFactory,如果可用,或者您实际上可以手动注入 LoggerFactory)SaveChanges
,因此您可以制作一个ILogger
获取输出的自定义实现(并解析它您知道这是一条 SQL 语句)并将其保存到外部文件中,然后将实体插入到连接到虚拟数据库的 DbContext 中(使用您期望在实际数据库上执行这些插入语句的相同提供程序稍后执行这些插入语句)。
推荐阅读
- optimization - 有什么方法可以提高 or-tools 的速度吗?
- android - 从 Angular 页面打开本机应用程序
- scala - 如何将元组列表排列成特定顺序
- spring-cloud-dataflow - 如何为特定平台安排任务
- android - 使用全屏查看寻呼机时底部工作表拖动问题
- apache-kafka - 我们可以按日期过滤队列中的消息吗?
- firebase - 参数“documentPath”的值不是有效的资源路径。Firebase 云函数
- java - Android JsonArrayRequest GET 方法正在异步填充我的 ArrayList
- python - 如何在 Mu Editor 中安装第三方模块?
- python - 在 Python 中递归编辑 dict