0

0

EF Core怎么处理二进制数据 EF Core byte[]映射方法

畫卷琴夢

畫卷琴夢

发布时间:2025-12-31 08:16:36

|

277人浏览过

|

来源于php中文网

原创

EF Core处理二进制数据需合理映射byte[]为数据库对应类型(如SQL Server→varbinary(max)、MySQL→longblob),并权衡存储策略:小而高频数据可直存,大文件推荐存路径+外部存储,同时注意性能、I/O瓶颈及流式读取等优化手段。

ef core怎么处理二进制数据 ef core byte[]映射方法

EF Core 处理二进制数据,核心是把 byte[] 类型正确映射到数据库的二进制列类型,并兼顾读写、存储策略和性能。不是简单加个属性就能用好,得看数据库类型、数据大小、使用场景。

byte[] 在实体类中的定义与基础映射

直接在实体中声明 byte[] 属性即可,EF Core 默认会识别并映射为对应数据库的二进制类型:

  • SQL Server → varbinary(max)
  • MySQL / MariaDB → longblob(若未显式指定)
  • PostgreSQL → bytea
  • SQLite → BLOB
  • Oracle → 需配合 .HasColumnType("RAW") 显式配置

例如:

public class Document
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public byte[] Content { get; set; } // 自动映射为二进制列
}

控制数据库列类型和约束

默认映射有时不够精准,尤其对大文件或有长度限制的场景,需在 OnModelCreating 中干预:

  • 指定精确类型和长度:HasColumnType("varbinary(8000)")HasColumnType("longblob")
  • 设为可空:IsRequired(false)(避免空图片/附件报错)
  • 添加注释或索引(如需按内容哈希查询):HasComment("原始PDF字节流")

示例(MySQL):

Contentfries
Contentfries

将长视频改造成更加引人注目的短视频

下载
modelBuilder.Entity()
    .Property(e => e.Content)
    .HasColumnType("longblob")
    .IsRequired(false)
    .HasComment("文档原始二进制内容");

大文件不建议直存数据库的现实考量

虽然 byte[] 能存任意二进制数据,但实际项目中要权衡:

  • 数据库体积膨胀快,备份/迁移变慢
  • 并发读取多时,可能成为 I/O 瓶颈
  • 无法利用 CDN、HTTP 缓存、断点续传等 Web 优化能力
  • 多数业务场景(头像、合同 PDF、Excel 报表)更适合“存路径 + 文件系统/S3”方案

只有小且高频访问的二进制数据(如图标、水印模板、加密密钥片段)才推荐直存 byte[]

需要额外处理的常见情况

byte[] 映射只是起点,真实需求常涉及:

  • 值转换器(Value Converter):比如把 byte[] 存成 Base64 字符串(仅限极小数据,不推荐)
  • 延迟加载或流式读取:避免一次性加载整个大数组到内存,可用 DbDataReader.GetStream() 配合 AsStream()(EF Core 7+ 支持)
  • 文件上传后存库:先用 IFormFile 读取,再转 await file.OpenReadStream().ReadBytesAsync() 赋值给 byte[] 属性
  • 下载响应:Controller 中用 File(entity.Content, "application/pdf", "doc.pdf")

基本上就这些。关键不是能不能存,而是该不该存、怎么存得稳、读得快。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

674

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

345

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1084

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

355

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

671

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

408

2024.04.29

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 777人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号