fix dictionaries sync

This commit is contained in:
Фролов 2021-07-16 09:15:10 +05:00
parent 5259a1c730
commit 0c645ed960
6 changed files with 155 additions and 357 deletions

View File

@ -15,7 +15,7 @@ namespace AsbCloudInfrastructure
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
{ {
services.AddDbContext<AsbCloudDbContext>(options => services.AddDbContext<AsbCloudDbContext>(options =>
options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"))); options.UseNpgsql(configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Scoped);
services.AddScoped<IAsbCloudDbContext>(provider => provider.GetService<AsbCloudDbContext>()); services.AddScoped<IAsbCloudDbContext>(provider => provider.GetService<AsbCloudDbContext>());

View File

@ -275,7 +275,7 @@ namespace AsbCloudInfrastructure.Services
return drillingAnalysis; return drillingAnalysis;
} }
private static double GetAForLinearFormula(IEnumerable<(double?, double)> rawData) private static double GetAForLinearFormula(IEnumerable<(double? x, double y)> rawData)
{ {
var (xSum, ySum, xySum, x2Sum) = GetFormulaVariables(rawData); var (xSum, ySum, xySum, x2Sum) = GetFormulaVariables(rawData);

View File

@ -12,7 +12,6 @@ namespace AsbCloudInfrastructure.Services.Cache
private readonly DbContext context; private readonly DbContext context;
private (DateTime refreshDate, IEnumerable<object> entities) data; private (DateTime refreshDate, IEnumerable<object> entities) data;
private readonly List<TEntity> cached; private readonly List<TEntity> cached;
private readonly ReaderWriterLockSlim cacheLocker = new ReaderWriterLockSlim();
internal CacheTable(DbContext context, (DateTime refreshDate, IEnumerable<object> entities) data) internal CacheTable(DbContext context, (DateTime refreshDate, IEnumerable<object> entities) data)
{ {
@ -25,36 +24,20 @@ namespace AsbCloudInfrastructure.Services.Cache
public int Refresh() public int Refresh()
{ {
cacheLocker.EnterWriteLock(); cached.Clear();
try var dbEntities = context.Set<TEntity>().ToList();
{ cached.AddRange(dbEntities);
cached.Clear(); data.refreshDate = DateTime.Now;
var dbEntities = context.Set<TEntity>().ToList(); return cached.Count;
cached.AddRange(dbEntities);
data.refreshDate = DateTime.Now;
return cached.Count;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public async Task<int> RefreshAsync(CancellationToken token = default) public async Task<int> RefreshAsync(CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); cached.Clear();
try var dbEntities = await context.Set<TEntity>().ToListAsync(token).ConfigureAwait(false);
{ cached.AddRange(dbEntities);
cached.Clear(); data.refreshDate = DateTime.Now;
var dbEntities = await context.Set<TEntity>().ToListAsync(token).ConfigureAwait(false); return cached.Count;
cached.AddRange(dbEntities);
data.refreshDate = DateTime.Now;
return cached.Count;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
private bool CheckRefresh(RefreshMode refreshMode) private bool CheckRefresh(RefreshMode refreshMode)
@ -106,30 +89,24 @@ namespace AsbCloudInfrastructure.Services.Cache
public TEntity FirstOrDefault(RefreshMode refreshMode = RefreshMode.IfResultEmpty) public TEntity FirstOrDefault(RefreshMode refreshMode = RefreshMode.IfResultEmpty)
{ {
bool isUpdated = CheckRefresh(refreshMode); bool isUpdated = CheckRefresh(refreshMode);
var result = cached.FirstOrDefault(); var result = cached.FirstOrDefault();
if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated) if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated)
{ {
Refresh(); Refresh();
return cached.FirstOrDefault(); return cached.FirstOrDefault();
} }
return result; return result;
} }
public async Task<TEntity> FirstOrDefaultAsync(RefreshMode refreshMode = RefreshMode.IfResultEmpty, CancellationToken token = default) public async Task<TEntity> FirstOrDefaultAsync(RefreshMode refreshMode = RefreshMode.IfResultEmpty, CancellationToken token = default)
{ {
bool isUpdated = await CheckRefreshAsync(refreshMode, token); bool isUpdated = await CheckRefreshAsync(refreshMode, token);
var result = cached.FirstOrDefault(); var result = cached.FirstOrDefault();
if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated) if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated)
{ {
await RefreshAsync(token); await RefreshAsync(token);
return cached.FirstOrDefault(); return cached.FirstOrDefault();
} }
return result; return result;
} }
@ -139,30 +116,24 @@ namespace AsbCloudInfrastructure.Services.Cache
public TEntity FirstOrDefault(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty) public TEntity FirstOrDefault(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty)
{ {
bool isUpdated = CheckRefresh(refreshMode); bool isUpdated = CheckRefresh(refreshMode);
var result = cached.FirstOrDefault(predicate); var result = cached.FirstOrDefault(predicate);
if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated) if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated)
{ {
Refresh(); Refresh();
return cached.FirstOrDefault(predicate); return cached.FirstOrDefault(predicate);
} }
return result; return result;
} }
public async Task<TEntity> FirstOrDefaultAsync(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty, CancellationToken token = default) public async Task<TEntity> FirstOrDefaultAsync(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty, CancellationToken token = default)
{ {
bool isUpdated = await CheckRefreshAsync(refreshMode, token); bool isUpdated = await CheckRefreshAsync(refreshMode, token);
var result = cached.FirstOrDefault(predicate); var result = cached.FirstOrDefault(predicate);
if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated) if (result == default && refreshMode == RefreshMode.IfResultEmpty && !isUpdated)
{ {
await RefreshAsync(token); await RefreshAsync(token);
return cached.FirstOrDefault(predicate); return cached.FirstOrDefault(predicate);
} }
return result; return result;
} }
@ -172,329 +143,153 @@ namespace AsbCloudInfrastructure.Services.Cache
public IEnumerable<TEntity> Select(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty) public IEnumerable<TEntity> Select(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty)
{ {
bool isUpdated = CheckRefresh(refreshMode); bool isUpdated = CheckRefresh(refreshMode);
var result = cached.Where(predicate); var result = cached.Where(predicate);
if (!result.Any() && refreshMode == RefreshMode.IfResultEmpty && !isUpdated) if (!result.Any() && refreshMode == RefreshMode.IfResultEmpty && !isUpdated)
{ {
Refresh(); Refresh();
return cached.Where(predicate); return cached.Where(predicate);
} }
return result; return result;
} }
public async Task<IEnumerable<TEntity>> SelectAsync(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty, CancellationToken token = default) public async Task<IEnumerable<TEntity>> SelectAsync(Func<TEntity, bool> predicate, RefreshMode refreshMode = RefreshMode.IfResultEmpty, CancellationToken token = default)
{ {
bool isUpdated = await CheckRefreshAsync(refreshMode, token); bool isUpdated = await CheckRefreshAsync(refreshMode, token);
var result = cached.Where(predicate); var result = cached.Where(predicate);
if (!result.Any() && refreshMode == RefreshMode.IfResultEmpty && !isUpdated) if (!result.Any() && refreshMode == RefreshMode.IfResultEmpty && !isUpdated)
{ {
await RefreshAsync(token); await RefreshAsync(token);
return cached.Where(predicate); return cached.Where(predicate);
} }
return result; return result;
} }
public IEnumerable<TEntity> Update(Func<TEntity, bool> predicate, Action<TEntity> mutation) public IEnumerable<TEntity> Mutate(Func<TEntity, bool> predicate, Action<TEntity> mutation)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var dbEntities = dbSet.Where(predicate);
try if (dbEntities.Any())
{ {
var dbSet = context.Set<TEntity>(); foreach (var dbEntity in dbEntities)
var dbEntities = dbSet.Where(predicate); mutation(dbEntity);
if (dbEntities.Any()) context.SaveChanges();
{
foreach (var dbEntity in dbEntities)
mutation(dbEntity);
context.SaveChanges();
}
cached.RemoveAll(e => predicate(e));
cached.AddRange(dbEntities);
return dbEntities;
}
finally
{
cacheLocker.ExitWriteLock();
} }
cached.RemoveAll(e => predicate(e));
cached.AddRange(dbEntities);
return dbEntities;
} }
public async Task<IEnumerable<TEntity>> UpdateAsync(Func<TEntity, bool> predicate, Action<TEntity> mutation, CancellationToken token = default) public async Task<IEnumerable<TEntity>> MutateAsync(Func<TEntity, bool> predicate, Action<TEntity> mutation, CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var dbEntities = dbSet.Where(predicate);
try if (dbEntities.Any())
{ {
var dbSet = context.Set<TEntity>(); foreach (var dbEntity in dbEntities)
var dbEntities = dbSet.Where(predicate); mutation(dbEntity);
if (dbEntities.Any()) await context.SaveChangesAsync(token).ConfigureAwait(false);
{
foreach (var dbEntity in dbEntities)
mutation(dbEntity);
await context.SaveChangesAsync(token).ConfigureAwait(false);
}
cached.RemoveAll(e => predicate(e));
cached.AddRange(dbEntities);
return dbEntities;
}
finally
{
cacheLocker.ExitWriteLock();
} }
cached.RemoveAll(e => predicate(e));
cached.AddRange(dbEntities);
return dbEntities;
} }
public TEntity Upsert(TEntity entity) public TEntity Upsert(TEntity entity)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var updated = dbSet.Update(entity);
try context.SaveChanges();
{ Refresh();
var dbSet = context.Set<TEntity>(); return updated.Entity;
Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<TEntity> entityEntry;
if (cached.Contains(entity))
{
entityEntry = dbSet.Update(entity);
cached.Remove(entity);
}
else
{
entityEntry = dbSet.Add(entity);
}
context.SaveChanges();
cached.Add(entityEntry.Entity);
return entityEntry.Entity;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public async Task<TEntity> UpsertAsync(TEntity entity, CancellationToken token = default) public async Task<TEntity> UpsertAsync(TEntity entity, CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var updated = dbSet.Update(entity);
try await context.SaveChangesAsync(token).ConfigureAwait(false);
{ await RefreshAsync(token).ConfigureAwait(false);
var dbSet = context.Set<TEntity>(); return updated.Entity;
Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<TEntity> entityEntry;
if (cached.Contains(entity))
{
entityEntry = dbSet.Update(entity);
cached.Remove(entity);
}
else
{
entityEntry = dbSet.Add(entity);
}
await context.SaveChangesAsync(token).ConfigureAwait(false);
cached.Add(entityEntry.Entity);
return entityEntry.Entity;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public IEnumerable<TEntity> Upsert(IEnumerable<TEntity> entities) public IEnumerable<TEntity> Upsert(IEnumerable<TEntity> entities)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var upsertedEntries = new List<TEntity>(entities.Count());
try foreach (var entity in entities)
{ upsertedEntries.Add(dbSet.Update(entity).Entity);
var dbSet = context.Set<TEntity>(); context.SaveChanges();
Refresh();
var upsertedEntries = new List<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<TEntity>>(entities.Count()); return upsertedEntries;
foreach (var entity in entities)
{
Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<TEntity> entityEntry;
if (cached.Contains(entity))
{
entityEntry = dbSet.Update(entity);
cached.Remove(entity);
}
else
{
entityEntry = dbSet.Add(entity);
}
upsertedEntries.Add(entityEntry);
}
context.SaveChanges();
var upserted = upsertedEntries.Select(e => e.Entity);
cached.AddRange(upserted);
return upserted;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public async Task<IEnumerable<TEntity>> UpsertAsync(IEnumerable<TEntity> entities, CancellationToken token = default) public async Task<IEnumerable<TEntity>> UpsertAsync(IEnumerable<TEntity> entities, CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var upsertedEntries = new List<TEntity>(entities.Count());
try foreach (var entity in entities)
{ upsertedEntries.Add(dbSet.Update(entity).Entity);
var dbSet = context.Set<TEntity>(); await context.SaveChangesAsync(token).ConfigureAwait(false);
await RefreshAsync(token).ConfigureAwait(false);
var upsertedEntries = new List<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<TEntity>>(entities.Count()); return upsertedEntries;
foreach (var entity in entities)
{
Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<TEntity> entityEntry;
if (cached.Contains(entity))
{
entityEntry = dbSet.Update(entity);
cached.Remove(entity);
}
else
{
entityEntry = dbSet.Add(entity);
}
upsertedEntries.Add(entityEntry);
}
await context.SaveChangesAsync(token).ConfigureAwait(false);
var upserted = upsertedEntries.Select(e => e.Entity);
cached.AddRange(upserted);
return upserted;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public void Remove(Func<TEntity, bool> predicate) public void Remove(Func<TEntity, bool> predicate)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
cached.RemoveAll(e => predicate(e));
try dbSet.RemoveRange(dbSet.Where(predicate));
{ context.SaveChanges();
var dbSet = context.Set<TEntity>(); return;
cached.RemoveAll(e => predicate(e));
dbSet.RemoveRange(dbSet.Where(predicate));
context.SaveChanges();
return;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public async Task RemoveAsync(Func<TEntity, bool> predicate, CancellationToken token = default) public async Task RemoveAsync(Func<TEntity, bool> predicate, CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
cached.RemoveAll(e => predicate(e));
try dbSet.RemoveRange(dbSet.Where(predicate));
{ await context.SaveChangesAsync(token).ConfigureAwait(false);
var dbSet = context.Set<TEntity>(); return;
cached.RemoveAll(e => predicate(e));
dbSet.RemoveRange(dbSet.Where(predicate));
await context.SaveChangesAsync(token).ConfigureAwait(false);
return;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public TEntity Insert(TEntity entity) public TEntity Insert(TEntity entity)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var dbEntity = dbSet.Add(entity).Entity;
try context.SaveChanges();
{ cached.Add(dbEntity);
var dbSet = context.Set<TEntity>(); return dbEntity;
var dbEntity = dbSet.Add(entity).Entity;
context.SaveChanges();
cached.Add(dbEntity);
return dbEntity;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public async Task<TEntity> InsertAsync(TEntity entity, CancellationToken token = default) public async Task<TEntity> InsertAsync(TEntity entity, CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var dbEntity = dbSet.Add(entity).Entity;
try await context.SaveChangesAsync(token).ConfigureAwait(false);
{ cached.Add(dbEntity);
var dbSet = context.Set<TEntity>(); return dbEntity;
var dbEntity = dbSet.Add(entity).Entity;
await context.SaveChangesAsync(token).ConfigureAwait(false);
cached.Add(dbEntity);
return dbEntity;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public IEnumerable<TEntity> Insert(IEnumerable<TEntity> newEntities) public IEnumerable<TEntity> Insert(IEnumerable<TEntity> newEntities)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var dbEntities = new List<TEntity>(newEntities.Count());
try foreach (var item in newEntities)
{ dbEntities.Add(dbSet.Add(item).Entity);
var dbSet = context.Set<TEntity>(); context.SaveChanges();
var dbEntities = new List<TEntity>(newEntities.Count()); cached.AddRange(dbEntities);
foreach (var item in newEntities) return dbEntities;
dbEntities.Add(dbSet.Add(item).Entity);
context.SaveChanges();
cached.AddRange(dbEntities);
return dbEntities;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
public async Task<IEnumerable<TEntity>> InsertAsync(IEnumerable<TEntity> newEntities, CancellationToken token = default) public async Task<IEnumerable<TEntity>> InsertAsync(IEnumerable<TEntity> newEntities, CancellationToken token = default)
{ {
cacheLocker.EnterWriteLock(); var dbSet = context.Set<TEntity>();
var dbEntities = new List<TEntity>(newEntities.Count());
try foreach (var item in newEntities)
{ dbEntities.Add(dbSet.Add(item).Entity);
var dbSet = context.Set<TEntity>(); await context.SaveChangesAsync(token).ConfigureAwait(false);
var dbEntities = new List<TEntity>(newEntities.Count()); cached.AddRange(dbEntities);
foreach (var item in newEntities) return dbEntities;
dbEntities.Add(dbSet.Add(item).Entity);
await context.SaveChangesAsync(token).ConfigureAwait(false);
cached.AddRange(dbEntities);
return dbEntities;
}
finally
{
cacheLocker.ExitWriteLock();
}
} }
} }
} }

View File

@ -9,13 +9,11 @@ namespace AsbCloudInfrastructure.Services
{ {
public class EventService : IEventService public class EventService : IEventService
{ {
private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
private readonly CacheTable<Event> cacheEvents; private readonly CacheTable<Event> cacheEvents;
public EventService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) public EventService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService)
{ {
this.db = db;
this.telemetryService = telemetryService; this.telemetryService = telemetryService;
cacheEvents = cacheDb.GetCachedTable<Event>((AsbCloudDbContext)db); cacheEvents = cacheDb.GetCachedTable<Event>((AsbCloudDbContext)db);
} }
@ -27,30 +25,14 @@ namespace AsbCloudInfrastructure.Services
var telemetryId = telemetryService.GetOrCreateTemetryIdByUid(uid); var telemetryId = telemetryService.GetOrCreateTemetryIdByUid(uid);
var ids = dtos.Select(e => e.Id).ToList(); var entities = dtos.Select(dto => new Event
var dbIds = (from e in db.Events
where e.IdTelemetry == telemetryId && ids.Contains(e.IdEvent)
select e.IdEvent).ToList();
foreach (var dto in dtos)
{ {
var entity = new Event IdEvent = dto.Id,
{ IdTelemetry = telemetryId,
IdEvent = dto.Id, IdCategory = dto.IdCategory,
IdTelemetry = telemetryId, MessageTemplate = dto.Message
IdCategory = dto.IdCategory, });
MessageTemplate = dto.Message cacheEvents.Upsert(entities);
};
if (dbIds.Contains(dto.Id))
db.Events.Update(entity);
else
db.Events.Add(entity);
}
db.SaveChanges();
cacheEvents.Refresh();
} }
} }
} }

View File

@ -10,15 +10,13 @@ namespace AsbCloudInfrastructure.Services
{ {
public class TelemetryUserService : ITelemetryUserService public class TelemetryUserService : ITelemetryUserService
{ {
private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService; private readonly ITelemetryService telemetryService;
private readonly CacheTable<TelemetryUser> cacheTUsers; private readonly CacheTable<TelemetryUser> cacheTelemetryUsers;
public TelemetryUserService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) public TelemetryUserService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService)
{ {
this.db = db;
this.telemetryService = telemetryService; this.telemetryService = telemetryService;
cacheTUsers = cacheDb.GetCachedTable<TelemetryUser>((AsbCloudDbContext)db); cacheTelemetryUsers = cacheDb.GetCachedTable<TelemetryUser>((AsbCloudDbContext)db);
} }
public void Upsert(string uid, IEnumerable<TelemetryUserDto> dtos) public void Upsert(string uid, IEnumerable<TelemetryUserDto> dtos)
@ -26,36 +24,18 @@ namespace AsbCloudInfrastructure.Services
if (!dtos.Any()) if (!dtos.Any())
return; return;
dtos = dtos.Distinct(new TelemetryUserDtoComparer());
var telemetryId = telemetryService.GetOrCreateTemetryIdByUid(uid); var telemetryId = telemetryService.GetOrCreateTemetryIdByUid(uid);
var ids = dtos.Select(e => e.Id).ToList(); var entities = dtos.Distinct(new TelemetryUserDtoComparer()).Select(dto => new TelemetryUser
var dbIds = (from e in db.TelemetryUsers
where e.IdTelemetry == telemetryId && ids.Contains(e.IdUser)
select e.IdUser).ToList();
foreach (var dto in dtos)
{ {
var entity = new TelemetryUser IdUser = dto.Id,
{ IdTelemetry = telemetryId,
IdUser = dto.Id, Level = dto.Level,
IdTelemetry = telemetryId, Name = dto.Name,
Level = dto.Level, Patronymic = dto.Patronymic,
Name = dto.Name, Surname = dto.Surname,
Patronymic = dto.Patronymic, });
Surname = dto.Surname, cacheTelemetryUsers.Upsert(entities);
};
if (dbIds.Contains(dto.Id))
db.TelemetryUsers.Update(entity);
else
db.TelemetryUsers.Add(entity);
}
db.SaveChanges();
cacheTUsers.Refresh();
} }
} }
} }

View File

@ -1,6 +1,11 @@
using AsbCloudDb.Model; using AsbCloudApp.Data;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services;
using AsbCloudInfrastructure.Services.Cache;
using AutoMapper;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic;
namespace ConsoleApp1 namespace ConsoleApp1
{ {
@ -20,10 +25,46 @@ namespace ConsoleApp1
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
//var options = new DbContextOptionsBuilder<AsbCloudDbContext>() var options = new DbContextOptionsBuilder<AsbCloudDbContext>()
// .UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True") .UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True")
// .Options; .Options;
//var context = new AsbCloudDbContext(options);
var acfg = new MapperConfiguration(cfg => {
cfg.CreateMap<DataSaubBase, DataSaubBaseDto>();
cfg.CreateMap<DataSaubBaseDto, DataSaubBase>();
cfg.CreateMap<Message, TelemetryMessageDto>();
cfg.CreateMap<TelemetryMessageDto, Message>();
cfg.CreateMap<TelemetryInfo, TelemetryInfoDto>();
cfg.CreateMap<TelemetryInfoDto, TelemetryInfo>();
});
var context = new AsbCloudDbContext(options);
var cachedDb = new CacheDb();
var telemetryService = new TelemetryService(context, cachedDb, acfg);
var telemetryUserService = new TelemetryUserService(context, cachedDb, telemetryService);
var tusers = new List<TelemetryUserDto> {
new TelemetryUserDto{
Id=1,
Level=0,
Name="Adminum",
},
new TelemetryUserDto{
Id=2,
Level=0,
Name="Adminum2",
},
};
telemetryUserService.Upsert("123", tusers);
tusers[0].Patronymic = "Trump";
telemetryUserService.Upsert("123", tusers);
//var e = new Event //var e = new Event
//{ //{