Deal with FIXMEs in persistence layer
This commit is contained in:
@@ -22,21 +22,24 @@ namespace Umbraco.Core
|
||||
/// </summary>
|
||||
public class DatabaseBuilder
|
||||
{
|
||||
private readonly IDatabaseFactory _databaseFactory;
|
||||
private readonly IRuntimeState _runtime;
|
||||
private readonly IMigrationEntryService _migrationEntryService;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private DatabaseSchemaResult _databaseSchemaValidationResult;
|
||||
|
||||
public DatabaseBuilder(DatabaseContext databaseContext, IRuntimeState runtime, IMigrationEntryService migrationEntryService, ILogger logger)
|
||||
public DatabaseBuilder(IDatabaseFactory databaseFactory, IRuntimeState runtime, IMigrationEntryService migrationEntryService, ILogger logger)
|
||||
{
|
||||
DatabaseContext = databaseContext;
|
||||
_databaseFactory = databaseFactory;
|
||||
_runtime = runtime;
|
||||
_migrationEntryService = migrationEntryService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public DatabaseContext DatabaseContext { get; }
|
||||
public UmbracoDatabase Database => _databaseFactory.GetDatabase();
|
||||
|
||||
public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlSyntax;
|
||||
|
||||
#region Status
|
||||
|
||||
@@ -45,12 +48,12 @@ namespace Umbraco.Core
|
||||
/// mean that it is possible to connect, nor that Umbraco is installed, nor
|
||||
/// up-to-date.
|
||||
/// </summary>
|
||||
public bool IsDatabaseConfigured => DatabaseContext.IsDatabaseConfigured;
|
||||
public bool IsDatabaseConfigured => _databaseFactory.Configured;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether it is possible to connect to the database.
|
||||
/// </summary>
|
||||
public bool CanConnect => DatabaseContext.CanConnect;
|
||||
public bool CanConnect => _databaseFactory.CanConnect;
|
||||
|
||||
// that method was originally created by Per in DatabaseHelper- tests the db connection for install
|
||||
// fixed by Shannon to not-ignore the provider
|
||||
@@ -97,7 +100,7 @@ namespace Umbraco.Core
|
||||
/// </summary>
|
||||
public void ConfigureEmbeddedDatabaseConnection()
|
||||
{
|
||||
ConfigureEmbeddedDatabaseConnection(DatabaseContext.DatabaseFactory, _logger);
|
||||
ConfigureEmbeddedDatabaseConnection(_databaseFactory, _logger);
|
||||
}
|
||||
|
||||
private static void ConfigureEmbeddedDatabaseConnection(IDatabaseFactory factory, ILogger logger)
|
||||
@@ -130,7 +133,7 @@ namespace Umbraco.Core
|
||||
: Constants.DbProviderNames.SqlServer;
|
||||
|
||||
SaveConnectionString(connectionString, providerName, _logger);
|
||||
DatabaseContext.DatabaseFactory.Configure(connectionString, providerName);
|
||||
_databaseFactory.Configure(connectionString, providerName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -147,7 +150,7 @@ namespace Umbraco.Core
|
||||
var connectionString = GetDatabaseConnectionString(server, databaseName, user, password, databaseProvider, out providerName);
|
||||
|
||||
SaveConnectionString(connectionString, providerName, _logger);
|
||||
DatabaseContext.DatabaseFactory.Configure(connectionString, providerName);
|
||||
_databaseFactory.Configure(connectionString, providerName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -185,7 +188,7 @@ namespace Umbraco.Core
|
||||
{
|
||||
var connectionString = GetIntegratedSecurityDatabaseConnectionString(server, databaseName);
|
||||
SaveConnectionString(connectionString, Constants.DbProviderNames.SqlServer, _logger);
|
||||
DatabaseContext.DatabaseFactory.Configure(connectionString, Constants.DbProviderNames.SqlServer);
|
||||
_databaseFactory.Configure(connectionString, Constants.DbProviderNames.SqlServer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -374,13 +377,13 @@ namespace Umbraco.Core
|
||||
|
||||
internal DatabaseSchemaResult ValidateDatabaseSchema()
|
||||
{
|
||||
if (DatabaseContext.DatabaseFactory.Configured == false)
|
||||
return new DatabaseSchemaResult(DatabaseContext.SqlSyntax);
|
||||
if (_databaseFactory.Configured == false)
|
||||
return new DatabaseSchemaResult(_databaseFactory.SqlSyntax);
|
||||
|
||||
if (_databaseSchemaValidationResult != null)
|
||||
return _databaseSchemaValidationResult;
|
||||
|
||||
var database = DatabaseContext.DatabaseFactory.GetDatabase();
|
||||
var database = _databaseFactory.GetDatabase();
|
||||
var dbSchema = new DatabaseSchemaCreation(database, _logger);
|
||||
_databaseSchemaValidationResult = dbSchema.ValidateSchema();
|
||||
return _databaseSchemaValidationResult;
|
||||
@@ -398,7 +401,7 @@ namespace Umbraco.Core
|
||||
|
||||
_logger.Info<DatabaseContext>("Database configuration status: Started");
|
||||
|
||||
var database = DatabaseContext.DatabaseFactory.GetDatabase();
|
||||
var database = _databaseFactory.GetDatabase();
|
||||
|
||||
// If MySQL, we're going to ensure that database calls are maintaining proper casing as to remove the necessity for checks
|
||||
// for case insensitive queries. In an ideal situation (which is what we're striving for), all calls would be case sensitive.
|
||||
@@ -468,7 +471,7 @@ namespace Umbraco.Core
|
||||
|
||||
_logger.Info<DatabaseContext>("Database upgrade started");
|
||||
|
||||
var database = DatabaseContext.DatabaseFactory.GetDatabase();
|
||||
var database = _databaseFactory.GetDatabase();
|
||||
//var supportsCaseInsensitiveQueries = SqlSyntax.SupportsCaseInsensitiveQueries(database);
|
||||
|
||||
var message = GetResultMessageForMySql();
|
||||
@@ -534,7 +537,7 @@ namespace Umbraco.Core
|
||||
|
||||
private string GetResultMessageForMySql()
|
||||
{
|
||||
if (DatabaseContext.SqlSyntax.GetType() == typeof(MySqlSyntaxProvider))
|
||||
if (_databaseFactory.GetType() == typeof(MySqlSyntaxProvider))
|
||||
{
|
||||
return "<p> </p><p>Congratulations, the database step ran successfully!</p>" +
|
||||
"<p>Note: You're using MySQL and the database instance you're connecting to seems to support case insensitive queries.</p>" +
|
||||
@@ -576,7 +579,7 @@ namespace Umbraco.Core
|
||||
|
||||
private Attempt<Result> CheckReadyForInstall()
|
||||
{
|
||||
if (DatabaseContext.DatabaseFactory.Configured == false)
|
||||
if (_databaseFactory.Configured == false)
|
||||
{
|
||||
return Attempt.Fail(new Result
|
||||
{
|
||||
|
||||
@@ -9,86 +9,76 @@ using Umbraco.Core.Persistence.SqlSyntax;
|
||||
namespace Umbraco.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents the Umbraco database.
|
||||
/// Represents the Umbraco database context.
|
||||
/// </summary>
|
||||
/// <remarks>One per AppDomain. Ensures that the database is available.</remarks>
|
||||
/// <remarks>
|
||||
/// <para>The database context creates Sql statements and IQuery expressions.</para>
|
||||
/// <para>The database context provides the SqlSyntax and the DatabaseType.</para>
|
||||
/// <para>The database context provides access to the "ambient" database.</para>
|
||||
/// <para>The database context provides basic status infos (whether the db is configured and can connect).</para>
|
||||
/// </remarks>
|
||||
public class DatabaseContext
|
||||
{
|
||||
private readonly IDatabaseFactory _databaseFactory;
|
||||
private bool _canConnectOnce;
|
||||
|
||||
// fixme
|
||||
// do we need to expose the query factory here?
|
||||
// all in all, would prob. mean replacing ALL repository.Query by something more meaningful? YES!
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DatabaseContext"/> class.
|
||||
/// </summary>
|
||||
/// <param name="databaseFactory">A database factory.</param>
|
||||
/// <remarks>The database factory will try to configure itself but may fail eg if the default
|
||||
/// Umbraco connection string is not available because we are installing. In which case this
|
||||
/// database context must sort things out and configure the database factory before it can be
|
||||
/// database builder must sort things out and configure the database factory before it can be
|
||||
/// used.</remarks>
|
||||
public DatabaseContext(IDatabaseFactory databaseFactory)
|
||||
{
|
||||
if (databaseFactory == null) throw new ArgumentNullException(nameof(databaseFactory));
|
||||
|
||||
DatabaseFactory = databaseFactory;
|
||||
_databaseFactory = databaseFactory;
|
||||
}
|
||||
|
||||
// FIXME
|
||||
// this is basically exposing a subset of the database factory...
|
||||
// so why? why not "just" merge with database factory?
|
||||
// which can create & manage ambient database,
|
||||
// create Sql<SqlContext> expressions
|
||||
// create IQuery<T> expressions
|
||||
// ?
|
||||
|
||||
internal IDatabaseFactory DatabaseFactory { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the QueryFactory
|
||||
/// Gets the query factory.
|
||||
/// </summary>
|
||||
public IQueryFactory QueryFactory => DatabaseFactory.QueryFactory; // fixme obsolete?
|
||||
/// <remarks>In most cases... this is useless, better use Query{T}.</remarks>
|
||||
public IQueryFactory QueryFactory => _databaseFactory.QueryFactory;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the database sql syntax.
|
||||
/// </summary>
|
||||
public ISqlSyntaxProvider SqlSyntax => DatabaseFactory.SqlSyntax;
|
||||
|
||||
// fixme
|
||||
// created by the database factory?
|
||||
// add PocoDataFactory
|
||||
// add DatabaseType
|
||||
// add Sql() and Query<T>()
|
||||
// so it can finally replace SqlContext entirely?
|
||||
// need an IDatabaseContext interface?
|
||||
|
||||
public Sql<SqlContext> Sql()
|
||||
{
|
||||
var factory = (DefaultDatabaseFactory) DatabaseFactory; // fixme
|
||||
return NPoco.Sql.BuilderFor(factory.SqlContext);
|
||||
}
|
||||
|
||||
public Sql<SqlContext> Sql(string sql, params object[] args)
|
||||
{
|
||||
return Sql().Append(sql, args);
|
||||
}
|
||||
|
||||
public IQuery<T> Query<T>()
|
||||
{
|
||||
return DatabaseFactory.QueryFactory.Create<T>();
|
||||
}
|
||||
public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlSyntax;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="Database"/> object for doing CRUD operations
|
||||
/// against custom tables that resides in the Umbraco database.
|
||||
/// Creates a Sql statement.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This should not be used for CRUD operations or queries against the
|
||||
/// standard Umbraco tables! Use the Public services for that.
|
||||
/// </remarks>
|
||||
public UmbracoDatabase Database => DatabaseFactory.GetDatabase();
|
||||
public Sql<SqlContext> Sql() => _databaseFactory.Sql();
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the database is configured. It does not necessarily
|
||||
/// mean that it is possible to connect, nor that Umbraco is installed, nor
|
||||
/// up-to-date.
|
||||
/// Creates a Sql statement.
|
||||
/// </summary>
|
||||
public bool IsDatabaseConfigured => DatabaseFactory.Configured;
|
||||
public Sql<SqlContext> Sql(string sql, params object[] args) => Sql().Append(sql, args);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a Query expression.
|
||||
/// </summary>
|
||||
public IQuery<T> Query<T>() => _databaseFactory.QueryFactory.Create<T>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets an "ambient" database for doing CRUD operations against custom tables that resides in the Umbraco database.
|
||||
/// </summary>
|
||||
/// <remarks>Should not be used for operation against standard Umbraco tables; as services should be used instead.</remarks>
|
||||
public UmbracoDatabase Database => _databaseFactory.GetDatabase();
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the database is configured.
|
||||
/// </summary>
|
||||
/// <remarks>It does not necessarily mean that it is possible to
|
||||
/// connect, nor that Umbraco is installed, nor up-to-date.</remarks>
|
||||
public bool IsDatabaseConfigured => _databaseFactory.Configured;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether it is possible to connect to the database.
|
||||
@@ -97,9 +87,18 @@ namespace Umbraco.Core
|
||||
{
|
||||
get
|
||||
{
|
||||
if (DatabaseFactory.Configured == false) return false;
|
||||
var canConnect = DatabaseFactory.CanConnect;
|
||||
Current.Logger.Info<DatabaseContext>("CanConnect = " + canConnect);
|
||||
var canConnect = _databaseFactory.Configured && _databaseFactory.CanConnect;
|
||||
|
||||
if (_canConnectOnce)
|
||||
{
|
||||
Current.Logger.Debug<DatabaseContext>("CanConnect: " + canConnect);
|
||||
}
|
||||
else
|
||||
{
|
||||
Current.Logger.Info<DatabaseContext>("CanConnect: " + canConnect);
|
||||
_canConnectOnce = canConnect; // keep logging Info until we can connect
|
||||
}
|
||||
|
||||
return canConnect;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,8 +165,7 @@ namespace Umbraco.Core.Persistence
|
||||
}
|
||||
}
|
||||
|
||||
// fixme
|
||||
public SqlContext SqlContext => _sqlContext;
|
||||
public Sql<SqlContext> Sql() => NPoco.Sql.BuilderFor(_sqlContext);
|
||||
|
||||
// will be configured by the database context
|
||||
public void Configure(string connectionString, string providerName)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using NPoco;
|
||||
using Umbraco.Core.Persistence.Querying;
|
||||
using Umbraco.Core.Persistence.SqlSyntax;
|
||||
|
||||
@@ -24,5 +25,7 @@ namespace Umbraco.Core.Persistence
|
||||
IQueryFactory QueryFactory { get; }
|
||||
|
||||
ISqlSyntaxProvider SqlSyntax { get; }
|
||||
|
||||
Sql<SqlContext> Sql();
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
typeof (IMemberGroup).FullName + "." + name,
|
||||
() =>
|
||||
{
|
||||
var qry = QueryFactory.Create<IMemberGroup>().Where(group => group.Name.Equals(name));
|
||||
var qry = Query.Where(group => group.Name.Equals(name));
|
||||
var result = GetByQuery(qry);
|
||||
return result.FirstOrDefault();
|
||||
},
|
||||
@@ -136,7 +136,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
|
||||
public IMemberGroup CreateIfNotExists(string roleName)
|
||||
{
|
||||
var qry = QueryFactory.Create<IMemberGroup>().Where(group => group.Name.Equals(roleName));
|
||||
var qry = Query.Where(group => group.Name.Equals(roleName));
|
||||
var result = GetByQuery(qry);
|
||||
|
||||
if (result.Any()) return null;
|
||||
|
||||
@@ -15,21 +15,19 @@ namespace Umbraco.Core.Persistence.UnitOfWork
|
||||
/// Initializes a new instance of the <see cref="NPocoUnitOfWork"/> class with a database and a repository factory.
|
||||
/// </summary>
|
||||
/// <param name="databaseContext">The database context.</param>
|
||||
/// <param name="database">A database.</param>
|
||||
/// <param name="repositoryFactory">A repository factory.</param>
|
||||
/// <remarks>This should be used by the NPocoUnitOfWorkProvider exclusively.</remarks>
|
||||
internal NPocoUnitOfWork(DatabaseContext databaseContext, UmbracoDatabase database, RepositoryFactory repositoryFactory)
|
||||
internal NPocoUnitOfWork(DatabaseContext databaseContext, RepositoryFactory repositoryFactory)
|
||||
: base(repositoryFactory)
|
||||
{
|
||||
DatabaseContext = databaseContext;
|
||||
Database = database;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public DatabaseContext DatabaseContext { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public UmbracoDatabase Database { get; } // => DatabaseContext.Database; // fixme + change ctor
|
||||
public UmbracoDatabase Database => DatabaseContext.Database;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override TRepository CreateRepository<TRepository>(string name = null)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Umbraco.Core.DI;
|
||||
using System;
|
||||
|
||||
namespace Umbraco.Core.Persistence.UnitOfWork
|
||||
{
|
||||
@@ -7,34 +7,29 @@ namespace Umbraco.Core.Persistence.UnitOfWork
|
||||
/// </summary>
|
||||
public class NPocoUnitOfWorkProvider : IDatabaseUnitOfWorkProvider
|
||||
{
|
||||
private readonly IDatabaseFactory _databaseFactory;
|
||||
private readonly RepositoryFactory _repositoryFactory;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NPocoUnitOfWorkProvider"/> class with a database factory and a repository factory.
|
||||
/// </summary>
|
||||
/// <param name="databaseFactory">A database factory.</param>
|
||||
/// <param name="databaseContext">A database context.</param>
|
||||
/// <param name="repositoryFactory">A repository factory.</param>
|
||||
public NPocoUnitOfWorkProvider(IDatabaseFactory databaseFactory, RepositoryFactory repositoryFactory)
|
||||
public NPocoUnitOfWorkProvider(DatabaseContext databaseContext, RepositoryFactory repositoryFactory)
|
||||
{
|
||||
Mandate.ParameterNotNull(databaseFactory, nameof(databaseFactory));
|
||||
Mandate.ParameterNotNull(repositoryFactory, nameof(repositoryFactory));
|
||||
_databaseFactory = databaseFactory;
|
||||
if (databaseContext == null) throw new ArgumentNullException(nameof(databaseContext));
|
||||
if (repositoryFactory == null) throw new ArgumentNullException(nameof(repositoryFactory));
|
||||
|
||||
DatabaseContext = databaseContext;
|
||||
_repositoryFactory = repositoryFactory;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public DatabaseContext DatabaseContext => Current.DatabaseContext; // fixme inject!
|
||||
public DatabaseContext DatabaseContext { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public IDatabaseUnitOfWork CreateUnitOfWork()
|
||||
{
|
||||
// get a database from the factory - might be the "ambient" database eg
|
||||
// the one that's enlisted with the HttpContext - so it's *not* necessary a
|
||||
// "new" database.
|
||||
var database = _databaseFactory.GetDatabase();
|
||||
var databaseContext = Current.DatabaseContext; // fixme - inject!
|
||||
return new NPocoUnitOfWork(databaseContext, database, _repositoryFactory);
|
||||
return new NPocoUnitOfWork(DatabaseContext, _repositoryFactory);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -602,7 +602,7 @@ namespace Umbraco.Core.Services
|
||||
var repository = uow.CreateRepository<IContentRepository>();
|
||||
var filterQuery = filter.IsNullOrWhiteSpace()
|
||||
? null
|
||||
: repository.QueryFactory.Create<IContent>().Where(x => x.Name.Contains(filter));
|
||||
: repository.Query.Where(x => x.Name.Contains(filter));
|
||||
return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
|
||||
}
|
||||
}
|
||||
@@ -659,7 +659,7 @@ namespace Umbraco.Core.Services
|
||||
var repository = uow.CreateRepository<IContentRepository>();
|
||||
var filterQuery = filter.IsNullOrWhiteSpace()
|
||||
? null
|
||||
: repository.QueryFactory.Create<IContent>().Where(x => x.Name.Contains(filter));
|
||||
: repository.Query.Where(x => x.Name.Contains(filter));
|
||||
return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ namespace Umbraco.Core.Services
|
||||
using (var uow = UowProvider.CreateUnitOfWork())
|
||||
{
|
||||
var repository = uow.CreateRepository<IDictionaryRepository>();
|
||||
var query = repository.QueryFactory.Create<IDictionaryItem>().Where(x => x.ParentId == null);
|
||||
var query = repository.Query.Where(x => x.ParentId == null);
|
||||
var items = repository.GetByQuery(query).ToArray();
|
||||
//ensure the lazy Language callback is assigned
|
||||
items.ForEach(EnsureDictionaryItemLanguageCallback);
|
||||
|
||||
@@ -469,7 +469,7 @@ namespace Umbraco.Core.Services
|
||||
var repository = uow.CreateRepository<IContentRepository>();
|
||||
var filterQuery = filter.IsNullOrWhiteSpace()
|
||||
? null
|
||||
: repository.QueryFactory.Create<IMedia>().Where(x => x.Name.Contains(filter));
|
||||
: Query<IMedia>().Where(x => x.Name.Contains(filter));
|
||||
return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
|
||||
}
|
||||
}
|
||||
@@ -525,7 +525,7 @@ namespace Umbraco.Core.Services
|
||||
var repository = uow.CreateRepository<IMediaRepository>();
|
||||
var filterQuery = filter.IsNullOrWhiteSpace()
|
||||
? null
|
||||
: repository.QueryFactory.Create<IMedia>().Where(x => x.Name.Contains(filter));
|
||||
: Query<IMedia>().Where(x => x.Name.Contains(filter));
|
||||
return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1050,7 +1050,7 @@ namespace Umbraco.Core.Services
|
||||
throw new InvalidOperationException("The role " + roleName + " is currently assigned to members");
|
||||
}
|
||||
|
||||
var query = repository.QueryFactory.Create<IMemberGroup>().Where(g => g.Name == roleName);
|
||||
var query = repository.Query.Where(g => g.Name == roleName);
|
||||
var found = repository.GetByQuery(query).ToArray();
|
||||
|
||||
foreach (var memberGroup in found)
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using Umbraco.Core.Events;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.Persistence.Querying;
|
||||
using Umbraco.Core.Persistence.UnitOfWork;
|
||||
|
||||
namespace Umbraco.Core.Services
|
||||
@@ -24,5 +25,7 @@ namespace Umbraco.Core.Services
|
||||
EventMessagesFactory = eventMessagesFactory;
|
||||
UowProvider = provider;
|
||||
}
|
||||
|
||||
protected IQuery<T> Query<T>() => UowProvider.DatabaseContext.Query<T>();
|
||||
}
|
||||
}
|
||||
@@ -640,7 +640,7 @@ namespace Umbraco.Core.Services
|
||||
using (var uow = UowProvider.CreateUnitOfWork())
|
||||
{
|
||||
var repository = uow.CreateRepository<IUserTypeRepository>();
|
||||
var query = repository.QueryFactory.Create<IUserType>().Where(x => x.Alias == alias);
|
||||
var query = repository.Query.Where(x => x.Alias == alias);
|
||||
var type = repository.GetByQuery(query).SingleOrDefault();
|
||||
uow.Complete();
|
||||
return type;
|
||||
@@ -673,7 +673,7 @@ namespace Umbraco.Core.Services
|
||||
using (var uow = UowProvider.CreateUnitOfWork())
|
||||
{
|
||||
var repository = uow.CreateRepository<IUserTypeRepository>();
|
||||
var query = repository.QueryFactory.Create<IUserType>().Where(x => x.Name == name);
|
||||
var query = repository.Query.Where(x => x.Name == name);
|
||||
var type = repository.GetByQuery(query).SingleOrDefault();
|
||||
uow.Complete();
|
||||
return type;
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Configuration.UmbracoSettings;
|
||||
using Umbraco.Core.IO;
|
||||
using Umbraco.Core.Models;
|
||||
@@ -1466,7 +1467,7 @@ namespace Umbraco.Tests.Services
|
||||
new TestUmbracoDatabaseAccessor(),
|
||||
Mappers);
|
||||
var repositoryFactory = MockRepositoryFactory();
|
||||
var provider = new NPocoUnitOfWorkProvider(databaseFactory, repositoryFactory);
|
||||
var provider = new NPocoUnitOfWorkProvider(new DatabaseContext(databaseFactory), repositoryFactory);
|
||||
var contentType = ServiceContext.ContentTypeService.Get("umbTextpage");
|
||||
var root = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 1);
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.Services
|
||||
public override void SetUp()
|
||||
{
|
||||
base.SetUp();
|
||||
|
||||
|
||||
// //we need to use our own custom IDatabaseFactory for the DatabaseContext because we MUST ensure that
|
||||
// //a Database instance is created per thread, whereas the default implementation which will work in an HttpContext
|
||||
// //threading environment, or a single apartment threading environment will not work for this test because
|
||||
@@ -257,6 +257,11 @@ namespace Umbraco.Tests.Services
|
||||
|
||||
public ISqlSyntaxProvider SqlSyntax { get; } = new SqlCeSyntaxProvider();
|
||||
|
||||
public Sql<SqlContext> Sql()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IQueryFactory QueryFactory => _queryFactory ?? (_queryFactory = new QueryFactory(SqlSyntax, _mappers));
|
||||
|
||||
public DatabaseType DatabaseType => DatabaseType.SQLCe;
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Linq;
|
||||
using LightInject;
|
||||
using Moq;
|
||||
using NPoco;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Events;
|
||||
@@ -224,7 +225,7 @@ namespace Umbraco.Tests.TestHelpers
|
||||
databaseFactory = new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, GetDefaultSqlSyntaxProviders(logger), logger, accessor, mappers);
|
||||
}
|
||||
repositoryFactory = repositoryFactory ?? new RepositoryFactory(Mock.Of<IServiceContainer>());
|
||||
return new NPocoUnitOfWorkProvider(databaseFactory, repositoryFactory);
|
||||
return new NPocoUnitOfWorkProvider(new DatabaseContext(databaseFactory), repositoryFactory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Web.Routing;
|
||||
using LightInject;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Configuration.UmbracoSettings;
|
||||
using Umbraco.Core.Logging;
|
||||
@@ -415,7 +416,7 @@ namespace Umbraco.Tests.Web.Mvc
|
||||
// new ProfilingLogger(logger, Mock.Of<IProfiler>())) { /*IsReady = true*/ };
|
||||
|
||||
var cache = new NullCacheProvider();
|
||||
var provider = new NPocoUnitOfWorkProvider(databaseFactory, new RepositoryFactory(Mock.Of<IServiceContainer>()));
|
||||
var provider = new NPocoUnitOfWorkProvider(new DatabaseContext(databaseFactory), new RepositoryFactory(Mock.Of<IServiceContainer>()));
|
||||
_service = new FacadeService(svcCtx, provider, cache, Enumerable.Empty<IUrlSegmentProvider>(), null, Current.Logger, null, true, false); // no events
|
||||
|
||||
var http = GetHttpContextFactory(url, routeData).HttpContext;
|
||||
|
||||
@@ -175,7 +175,7 @@ namespace Umbraco.Web.Editors
|
||||
if (filter.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
//add the default text filter
|
||||
queryFilter = DatabaseContext.QueryFactory.Create<IContent>()
|
||||
queryFilter = DatabaseContext.Query<IContent>()
|
||||
.Where(x => x.Name.Contains(filter));
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ namespace Umbraco.Web.Editors
|
||||
if (filter.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
//add the default text filter
|
||||
queryFilter = DatabaseContext.QueryFactory.Create<IMedia>()
|
||||
queryFilter = DatabaseContext.Query<IMedia>()
|
||||
.Where(x => x.Name.Contains(filter));
|
||||
}
|
||||
|
||||
|
||||
@@ -186,13 +186,13 @@ namespace Umbraco.Web.Install
|
||||
}
|
||||
|
||||
//check if we have the default user configured already
|
||||
var result = _databaseBuilder.DatabaseContext.Database.ExecuteScalar<int>(
|
||||
var result = _databaseBuilder.Database.ExecuteScalar<int>(
|
||||
"SELECT COUNT(*) FROM umbracoUser WHERE id=0 AND userPassword='default'");
|
||||
if (result == 1)
|
||||
{
|
||||
//the user has not been configured
|
||||
//this is always true on UaaS, need to check if there's multiple users too
|
||||
var usersResult = _databaseBuilder.DatabaseContext.Database.ExecuteScalar<int>("SELECT COUNT(*) FROM umbracoUser");
|
||||
var usersResult = _databaseBuilder.Database.ExecuteScalar<int>("SELECT COUNT(*) FROM umbracoUser");
|
||||
return usersResult == 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Umbraco.Web.Install.InstallSteps
|
||||
{
|
||||
var errorReport = new List<string>();
|
||||
|
||||
var sqlSyntax = _databaseBuilder.DatabaseContext.SqlSyntax;
|
||||
var sqlSyntax = _databaseBuilder.SqlSyntax;
|
||||
|
||||
var sql = new Sql();
|
||||
sql
|
||||
@@ -94,7 +94,7 @@ namespace Umbraco.Web.Install.InstallSteps
|
||||
sqlSyntax.GetQuotedColumn("cmsDataType", "nodeId") + " = " +
|
||||
sqlSyntax.GetQuotedColumn("umbracoNode", "id"));
|
||||
|
||||
var list = _databaseBuilder.DatabaseContext.Database.Fetch<dynamic>(sql);
|
||||
var list = _databaseBuilder.Database.Fetch<dynamic>(sql);
|
||||
foreach (var item in list)
|
||||
{
|
||||
Guid legacyId = item.controlId;
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace Umbraco.Web.Install.InstallSteps
|
||||
&& _databaseBuilder.IsDatabaseConfigured)
|
||||
{
|
||||
//check if we have the default user configured already
|
||||
var result = _databaseBuilder.DatabaseContext.Database.ExecuteScalar<int>(
|
||||
var result = _databaseBuilder.Database.ExecuteScalar<int>(
|
||||
"SELECT COUNT(*) FROM umbracoUser WHERE id=0 AND userPassword='default'");
|
||||
if (result == 1)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user