CompileAsyncQuery: RegisterInstanceDao

This commit is contained in:
Anton Suhorukov 2023-05-31 10:55:03 +03:00
parent dbbebc8c4b
commit 9a3f0278a3

View File

@ -42,16 +42,16 @@ public class RegisterInstanceDao<T> : IRegisterInstanceDao<T> where T : IHostedS
public async Task AddOrUpdateAsync(InstanceRegistration obj) public async Task AddOrUpdateAsync(InstanceRegistration obj)
{ {
using var _instanceRegistrationContext = _dbContextFactory.CreateDbContext(); using var instanceRegistrationContext = _dbContextFactory.CreateDbContext();
var inst = await _instanceRegistrationContext.InstanceRegistrations.FindAsync(obj.InstanceRegistrationId); var inst = await instanceRegistrationContext.InstanceRegistrations.FindAsync(obj.InstanceRegistrationId);
if (inst == null) if (inst == null)
{ {
await _instanceRegistrationContext.AddAsync(obj); await instanceRegistrationContext.AddAsync(obj);
} }
else else
{ {
_instanceRegistrationContext.Entry(inst).CurrentValues.SetValues(obj); instanceRegistrationContext.Entry(inst).CurrentValues.SetValues(obj);
} }
bool saveFailed; bool saveFailed;
@ -62,7 +62,7 @@ public class RegisterInstanceDao<T> : IRegisterInstanceDao<T> where T : IHostedS
try try
{ {
await _instanceRegistrationContext.SaveChangesAsync(); await instanceRegistrationContext.SaveChangesAsync();
} }
catch (DbUpdateConcurrencyException ex) catch (DbUpdateConcurrencyException ex)
{ {
@ -83,27 +83,25 @@ public class RegisterInstanceDao<T> : IRegisterInstanceDao<T> where T : IHostedS
public async Task<IEnumerable<InstanceRegistration>> GetAllAsync() public async Task<IEnumerable<InstanceRegistration>> GetAllAsync()
{ {
using var _instanceRegistrationContext = _dbContextFactory.CreateDbContext(); using var instanceRegistrationContext = _dbContextFactory.CreateDbContext();
return await _instanceRegistrationContext.InstanceRegistrations return await Queries.GetInstanceRegistrationsAsync(instanceRegistrationContext, typeof(T).GetFormattedName()).ToListAsync();
.Where(x => x.WorkerTypeName == typeof(T).GetFormattedName())
.ToListAsync();
} }
public async Task DeleteAsync(string instanceId) public async Task DeleteAsync(string instanceId)
{ {
using var _instanceRegistrationContext = _dbContextFactory.CreateDbContext(); using var instanceRegistrationContext = _dbContextFactory.CreateDbContext();
var item = await _instanceRegistrationContext.InstanceRegistrations.FindAsync(instanceId); var item = await instanceRegistrationContext.InstanceRegistrations.FindAsync(instanceId);
if (item == null) if (item == null)
{ {
return; return;
} }
_instanceRegistrationContext.InstanceRegistrations.Remove(item); instanceRegistrationContext.InstanceRegistrations.Remove(item);
try try
{ {
await _instanceRegistrationContext.SaveChangesAsync(); await instanceRegistrationContext.SaveChangesAsync();
} }
catch (DbUpdateConcurrencyException ex) catch (DbUpdateConcurrencyException ex)
{ {
@ -117,3 +115,11 @@ public class RegisterInstanceDao<T> : IRegisterInstanceDao<T> where T : IHostedS
} }
} }
file static class Queries
{
public static readonly Func<InstanceRegistrationContext, string, IAsyncEnumerable<InstanceRegistration>> GetInstanceRegistrationsAsync = Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(InstanceRegistrationContext ctx, string workerTypeName) =>
ctx.InstanceRegistrations
.Where(x => x.WorkerTypeName == workerTypeName));
}