【问题标题】:How to insert or update large data into varchar(max) using EF 6如何使用 EF 6 将大数据插入或更新到 varchar(max)
【发布时间】:2017-06-13 05:53:27
【问题描述】:

我正在使用 EF6 和 SQL Server 2012。我有一个表,其中包含 varchar(max) 列中的文本文件。平均文件大小为几 MB,但我正在寻找一种也适用于较大文件的解决方案。我使用字符串数据类型添加或更新此列,但我认为这不是更新数千条记录的有效方法,其中每条记录为 4 到 5 Mb。是否有任何有效的方法可以在 EF(甚至在 ADO.net)中插入或更新大型数据类型?

【问题讨论】:

  • 您对“高效”的期望是什么?每个“4 到 5 MB”的“几千”个文件大约是 10GB。您的网络 I/O 将成为这里的瓶颈,而不是您的 C# 代码。
  • 您可以使用 blob,但有效的方法是将文件保存在 HDD 上而不是 DB 上。
  • @DStanley 因为 EF 将加载每一行以更新并将连接字符串,因此它将使用大量内存
  • @rashfmnb 实际上并非每次都如此。文件打开和文件关闭操作很慢
  • @ZubaerNaseem 所以你要将新数据与现有数据连接起来?

标签: c# sql-server ado.net entity-framework-6


【解决方案1】:

对于大文件,该字段可以更改为 varbinary(max),文件可以转换为二进制格式并插入数据库。对于大于 1MB 的文件,Filestreams 提供了更好的选择。尝试访问Convert file to binary in C#进行二进制转换。

【讨论】:

  • 效率如何?
【解决方案2】:

我最终创建了一个使用 varchar(max) 写入函数的存储过程。通过调用 SP 而不是更新 EF 对象,我能够使我的代码快 10 倍。该 SP 然后执行类似于

的查询
update MyTable set col1.Write(@data, @oldLength, @data_length)

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多