fixed query

This commit is contained in:
pavelbannov 2023-06-30 17:44:48 +03:00
parent 1d3534ab46
commit 4e95a973e0

View File

@ -142,7 +142,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
{
await using var filesDbContext = _dbContextFactory.CreateDbContext();
var dbFile = await Queries.DbFileQueryByFileVersionAsync(filesDbContext, TenantID, fileId, fileVersion);
var dbFile = await Queries.DbFileQueryFileStableAsync(filesDbContext, TenantID, fileId, fileVersion);
return _mapper.Map<DbFileQuery, File<int>>(dbFile);
}
@ -941,11 +941,6 @@ internal class FileDao : AbstractDao, IFileDao<int>
comment ??= string.Empty;
comment = comment.Substring(0, Math.Min(comment.Length, 255));
await Query(filesDbContext.Files)
.Where(r => r.Id == fileId)
.Where(r => r.Version == fileVersion)
.ExecuteUpdateAsync(f => f.SetProperty(p => p.Comment, comment));
await Queries.UpdateDbFilesCommentAsync(filesDbContext, TenantID, fileId, fileVersion, comment);
return comment;
@ -1597,6 +1592,31 @@ static file class Queries
})
.SingleOrDefault());
public static readonly Func<FilesDbContext, int, int, int, Task<DbFileQuery>> DbFileQueryFileStableAsync =
Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(FilesDbContext ctx, int tenantId, int fileId, int fileVersion) =>
ctx.Files
.Where(r => r.TenantId == tenantId)
.Where(r => r.Id == fileId && r.Forcesave == ForcesaveType.None)
.Where(r => fileVersion < 0 || r.Version <= fileVersion)
.OrderByDescending(r => r.Version)
.AsNoTracking()
.Select(r => new DbFileQuery
{
File = r,
Root = (from f in ctx.Folders
where f.Id ==
(from t in ctx.Tree
where t.FolderId == r.ParentId
orderby t.Level descending
select t.ParentId
).FirstOrDefault()
where f.TenantId == r.TenantId
select f
).FirstOrDefault()
})
.FirstOrDefault());
public static readonly Func<FilesDbContext, int, string, int, Task<DbFileQuery>> DbFileQueryByTitleAsync =
Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(FilesDbContext ctx, int tenantId, string title, int parentId) =>
@ -1904,7 +1924,7 @@ static file class Queries
.Where(r => r.TenantId == tenantId)
.Where(r => r.Id == fileId)
.Where(r => r.Forcesave == ForcesaveType.None)
.Where(r => version > 0 && r.Version == version)
.Where(r => version <= 0 || r.Version == version)
.OrderBy(r => r.Version)
.AsQueryable());