实体框架错误地更新了byte []

时间:2019-05-21 15:01:05

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

我正在更新数据库中记录的图像(我们使用的服务器不允许将图像保存在文件系统中),并且它是第一次更新图像,但是如果我想尽快重新更新图像,即使所有代码都正确执行了,数据库中的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>());

0 个答案:

没有答案