我正在更新数据库中记录的图像(我们使用的服务器不允许将图像保存在文件系统中),并且它是第一次更新图像,但是如果我想尽快重新更新图像,即使所有代码都正确执行了,数据库中的byte []也不会更新。如果我使用断点并调试代码-数据将被保存。
第一个怀疑是MemoryStream,它可能无法读取所有内容,并且从数据库中丢弃了格式错误的数据,因此我移出了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>());