首页 > 解决方案 > 实体框架不正确地更新 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>());

标签: c#entity-framework.net-coreasp.net-core-webapi

解决方案


推荐阅读