c# - 实体框架不正确地更新 byte[]
问题描述
我正在为数据库中的记录更新图像(我们使用的服务器不允许将图像保存在文件系统中)并且它是第一次更新图像,但是如果我想尽快重新更新图片,即使尽管事实上,所有代码都没有错误地执行,数据库中的 byte[] 没有更新。如果我使用断点并调试代码 - 数据正在被保存。
第一个怀疑是 MemoryStream,事实上它可能没有读取所有内容,并且从 DB 中丢弃了格式错误的数据,所以我移除了 fileBytes 和 fileName 的定义,以及服务调用和返回,但它没有帮助。
似乎 EF 正在缓存数据,但我目前没有证据证明该声明
public ImageResponse Post(IFormFile file, int targetId)
{
// TODO save content Type
// TODO save content size
if (file == null)
{
throw new Exception();
}
long size = file.Length;
if (size > 0)
{
byte[] fileBytes;
string fileName;
using (var memoryStream = new MemoryStream())
{
file.CopyTo(memoryStream);
fileBytes = memoryStream.ToArray();
fileName = $"{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
}
this.targetService.AddImage(new TargetImage { TargetId = targetId, ImageFile = fileBytes });
return new ImageResponse
{
Size = size
};
}
else
{
throw new Exception();
}
}
public GeneralResult AddImage(TargetImage targetImage)
{
var entity = this.targets.Find(targetImage.TargetId) ??
throw new Exception();
entity.TargetPictureUrl = targetImage.ImageFile;
this.targets.Save(entity);
return new GeneralResult { Success = true };
}
在引擎盖下它看起来像这样:
public void Save(DatabaseEntity entity)
{
if (entity is T)
{
this.Save((T)entity);
}
else
{
throw new ApplicationException($"{typeof(T).Name} is required instance type.");
}
}
“实体”是:
private DbSet<T> entities;
protected virtual DbSet<T> Entities => this.entities ?? (this.entities = this.context.Set<T>());
解决方案
推荐阅读
- python - 使用 python 的 youtube 视频评论下载器
- spring - Xml Spring 配置:无法找到 springframework.org/schema/security
- java - Retrofit Api 接口中的属性值必须是常量
- python - 如何在numpy中将向量与矩阵组合
- django - 自动填写表单域
- matlab - 在带有矩阵的图像处理中使用 parfor
- javascript - JQuery返回的孩子数量超过了现有数量
- amazon-redshift - Amazon Redshift 的“ON UPDATE”等效项
- java - 帕斯卡三角 - 不需要的输出
- download - 使用 Google Sign-in 登录网络服务器