fix #2596 - fix EF Core tracking error when updating a file in a folder which has a Capacity specified

This commit is contained in:
Shaun Walker
2023-02-15 12:43:18 -05:00
parent 11dd3ce110
commit 2e61a43e4f
3 changed files with 20 additions and 8 deletions

View File

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@ -27,10 +26,23 @@ namespace Oqtane.Repository
}
public IEnumerable<File> GetFiles(int folderId)
{
return GetFiles(folderId, true);
}
public IEnumerable<File> GetFiles(int folderId, bool tracking)
{
var alias = _tenants.GetAlias();
IEnumerable<Permission> permissions = _permissions.GetPermissions(alias.SiteId, EntityNames.Folder, folderId).ToList();
IEnumerable<File> files = _db.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
IEnumerable<File> files;
if (tracking)
{
files = _db.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
}
else
{
files = _db.File.AsNoTracking().Where(item => item.FolderId == folderId).Include(item => item.Folder);
}
foreach (File file in files)
{
file.Folder.Permissions = permissions.EncodePermissions();
@ -135,7 +147,7 @@ namespace Oqtane.Repository
public string GetFilePath(File file)
{
if (file == null) return null;
var folder = file.Folder ?? _db.Folder.Find(file.FolderId);
var folder = file.Folder ?? _db.Folder.AsNoTracking().FirstOrDefault(item => item.FolderId == file.FolderId);
var filepath = Path.Combine(_folderRepository.GetFolderPath(folder), file.Name);
return filepath;
}

View File

@ -6,6 +6,7 @@ namespace Oqtane.Repository
public interface IFileRepository
{
IEnumerable<File> GetFiles(int folderId);
IEnumerable<File> GetFiles(int folderId, bool tracking);
File AddFile(File file);
File UpdateFile(File file);
File GetFile(int fileId);