Files
Umbraco-CMS/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/KeyValueRepository.cs

119 lines
3.3 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Scoping;
namespace Umbraco.Core.Persistence.Repositories.Implement
{
internal class KeyValueRepository : NPocoRepositoryBase<string, IKeyValue>, IKeyValueRepository
{
public KeyValueRepository(IScopeAccessor scopeAccessor, ILogger logger)
: base(scopeAccessor, AppCaches.NoCache, logger)
{ }
#region Overrides of IReadWriteQueryRepository<string, IKeyValue>
public override void Save(IKeyValue entity)
{
if (Get(entity.Identifier) == null)
PersistNewItem(entity);
else
PersistUpdatedItem(entity);
}
#endregion
#region Overrides of NPocoRepositoryBase<string, IKeyValue>
protected override Guid NodeObjectTypeId => throw new NotSupportedException();
protected override Sql<ISqlContext> GetBaseQuery(bool isCount)
{
var sql = SqlContext.Sql();
sql = isCount
? sql.SelectCount()
: sql.Select<KeyValueDto>();
sql
.From<KeyValueDto>();
return sql;
}
protected override string GetBaseWhereClause()
{
return Constants.DatabaseSchema.Tables.KeyValue + ".key = @id";
}
protected override IEnumerable<string> GetDeleteClauses()
{
return Enumerable.Empty<string>();
}
protected override IKeyValue PerformGet(string id)
{
var sql = GetBaseQuery(false).Where<KeyValueDto>(x => x.Key == id);
var dto = Database.Fetch<KeyValueDto>(sql).FirstOrDefault();
return dto == null ? null : Map(dto);
}
protected override IEnumerable<IKeyValue> PerformGetAll(params string[] ids)
{
var sql = GetBaseQuery(false).WhereIn<KeyValueDto>(x => x.Key, ids);
var dtos = Database.Fetch<KeyValueDto>(sql);
return dtos.WhereNotNull().Select(Map);
}
protected override IEnumerable<IKeyValue> PerformGetByQuery(IQuery<IKeyValue> query)
{
throw new NotSupportedException();
}
protected override void PersistNewItem(IKeyValue entity)
{
var dto = Map(entity);
Database.Insert(dto);
}
protected override void PersistUpdatedItem(IKeyValue entity)
{
var dto = Map(entity);
Database.Update(dto);
}
private static KeyValueDto Map(IKeyValue keyValue)
{
if (keyValue == null) return null;
return new KeyValueDto
{
Key = keyValue.Identifier,
Value = keyValue.Value,
UpdateDate = keyValue.UpdateDate,
};
}
private static IKeyValue Map(KeyValueDto dto)
{
if (dto == null) return null;
return new KeyValue
{
Identifier = dto.Key,
Value = dto.Value,
UpdateDate = dto.UpdateDate,
};
}
#endregion
}
}