diff --git a/src/Umbraco.Core/DatabaseBuilder.cs b/src/Umbraco.Core/DatabaseBuilder.cs index 5a6ecef816..4fc631c305 100644 --- a/src/Umbraco.Core/DatabaseBuilder.cs +++ b/src/Umbraco.Core/DatabaseBuilder.cs @@ -22,21 +22,24 @@ namespace Umbraco.Core /// 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. /// - public bool IsDatabaseConfigured => DatabaseContext.IsDatabaseConfigured; + public bool IsDatabaseConfigured => _databaseFactory.Configured; /// /// Gets a value indicating whether it is possible to connect to the database. /// - 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 /// 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); } /// @@ -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); } /// @@ -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); } /// @@ -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("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("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 "

 

Congratulations, the database step ran successfully!

" + "

Note: You're using MySQL and the database instance you're connecting to seems to support case insensitive queries.

" + @@ -576,7 +579,7 @@ namespace Umbraco.Core private Attempt CheckReadyForInstall() { - if (DatabaseContext.DatabaseFactory.Configured == false) + if (_databaseFactory.Configured == false) { return Attempt.Fail(new Result { diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs index 1500ba78ba..4a702b225c 100644 --- a/src/Umbraco.Core/DatabaseContext.cs +++ b/src/Umbraco.Core/DatabaseContext.cs @@ -9,86 +9,76 @@ using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core { /// - /// Represents the Umbraco database. + /// Represents the Umbraco database context. /// - /// One per AppDomain. Ensures that the database is available. + /// + /// The database context creates Sql statements and IQuery expressions. + /// The database context provides the SqlSyntax and the DatabaseType. + /// The database context provides access to the "ambient" database. + /// The database context provides basic status infos (whether the db is configured and can connect). + /// 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! + /// /// Initializes a new instance of the class. /// /// A database factory. /// 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. 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 expressions - // create IQuery expressions - // ? - - internal IDatabaseFactory DatabaseFactory { get; } - /// - /// Gets the QueryFactory + /// Gets the query factory. /// - public IQueryFactory QueryFactory => DatabaseFactory.QueryFactory; // fixme obsolete? + /// In most cases... this is useless, better use Query{T}. + public IQueryFactory QueryFactory => _databaseFactory.QueryFactory; /// /// Gets the database sql syntax. /// - public ISqlSyntaxProvider SqlSyntax => DatabaseFactory.SqlSyntax; - - // fixme - // created by the database factory? - // add PocoDataFactory - // add DatabaseType - // add Sql() and Query() - // so it can finally replace SqlContext entirely? - // need an IDatabaseContext interface? - - public Sql Sql() - { - var factory = (DefaultDatabaseFactory) DatabaseFactory; // fixme - return NPoco.Sql.BuilderFor(factory.SqlContext); - } - - public Sql Sql(string sql, params object[] args) - { - return Sql().Append(sql, args); - } - - public IQuery Query() - { - return DatabaseFactory.QueryFactory.Create(); - } + public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlSyntax; /// - /// Gets the object for doing CRUD operations - /// against custom tables that resides in the Umbraco database. + /// Creates a Sql statement. /// - /// - /// This should not be used for CRUD operations or queries against the - /// standard Umbraco tables! Use the Public services for that. - /// - public UmbracoDatabase Database => DatabaseFactory.GetDatabase(); + public Sql Sql() => _databaseFactory.Sql(); /// - /// 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. /// - public bool IsDatabaseConfigured => DatabaseFactory.Configured; + public Sql Sql(string sql, params object[] args) => Sql().Append(sql, args); + + /// + /// Creates a Query expression. + /// + public IQuery Query() => _databaseFactory.QueryFactory.Create(); + + /// + /// Gets an "ambient" database for doing CRUD operations against custom tables that resides in the Umbraco database. + /// + /// Should not be used for operation against standard Umbraco tables; as services should be used instead. + public UmbracoDatabase Database => _databaseFactory.GetDatabase(); + + /// + /// 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. + public bool IsDatabaseConfigured => _databaseFactory.Configured; /// /// 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("CanConnect = " + canConnect); + var canConnect = _databaseFactory.Configured && _databaseFactory.CanConnect; + + if (_canConnectOnce) + { + Current.Logger.Debug("CanConnect: " + canConnect); + } + else + { + Current.Logger.Info("CanConnect: " + canConnect); + _canConnectOnce = canConnect; // keep logging Info until we can connect + } + return canConnect; } } diff --git a/src/Umbraco.Core/Persistence/DefaultDatabaseFactory.cs b/src/Umbraco.Core/Persistence/DefaultDatabaseFactory.cs index c792522441..011ecbd971 100644 --- a/src/Umbraco.Core/Persistence/DefaultDatabaseFactory.cs +++ b/src/Umbraco.Core/Persistence/DefaultDatabaseFactory.cs @@ -165,8 +165,7 @@ namespace Umbraco.Core.Persistence } } - // fixme - public SqlContext SqlContext => _sqlContext; + public Sql Sql() => NPoco.Sql.BuilderFor(_sqlContext); // will be configured by the database context public void Configure(string connectionString, string providerName) diff --git a/src/Umbraco.Core/Persistence/IDatabaseFactory.cs b/src/Umbraco.Core/Persistence/IDatabaseFactory.cs index dc6d3a6281..ab563b9493 100644 --- a/src/Umbraco.Core/Persistence/IDatabaseFactory.cs +++ b/src/Umbraco.Core/Persistence/IDatabaseFactory.cs @@ -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 Sql(); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index 8d436e1357..75d21c8f13 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -124,7 +124,7 @@ namespace Umbraco.Core.Persistence.Repositories typeof (IMemberGroup).FullName + "." + name, () => { - var qry = QueryFactory.Create().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().Where(group => group.Name.Equals(roleName)); + var qry = Query.Where(group => group.Name.Equals(roleName)); var result = GetByQuery(qry); if (result.Any()) return null; diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWork.cs b/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWork.cs index c6049742a2..adff6ff4ae 100644 --- a/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWork.cs +++ b/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWork.cs @@ -15,21 +15,19 @@ namespace Umbraco.Core.Persistence.UnitOfWork /// Initializes a new instance of the class with a database and a repository factory. /// /// The database context. - /// A database. /// A repository factory. /// This should be used by the NPocoUnitOfWorkProvider exclusively. - internal NPocoUnitOfWork(DatabaseContext databaseContext, UmbracoDatabase database, RepositoryFactory repositoryFactory) + internal NPocoUnitOfWork(DatabaseContext databaseContext, RepositoryFactory repositoryFactory) : base(repositoryFactory) { DatabaseContext = databaseContext; - Database = database; } /// public DatabaseContext DatabaseContext { get; } /// - public UmbracoDatabase Database { get; } // => DatabaseContext.Database; // fixme + change ctor + public UmbracoDatabase Database => DatabaseContext.Database; /// public override TRepository CreateRepository(string name = null) diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWorkProvider.cs b/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWorkProvider.cs index 65187440e0..ce2c4557fa 100644 --- a/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWorkProvider.cs +++ b/src/Umbraco.Core/Persistence/UnitOfWork/NPocoUnitOfWorkProvider.cs @@ -1,4 +1,4 @@ -using Umbraco.Core.DI; +using System; namespace Umbraco.Core.Persistence.UnitOfWork { @@ -7,34 +7,29 @@ namespace Umbraco.Core.Persistence.UnitOfWork ///
public class NPocoUnitOfWorkProvider : IDatabaseUnitOfWorkProvider { - private readonly IDatabaseFactory _databaseFactory; private readonly RepositoryFactory _repositoryFactory; /// /// Initializes a new instance of the class with a database factory and a repository factory. /// - /// A database factory. + /// A database context. /// A repository factory. - 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; } /// - public DatabaseContext DatabaseContext => Current.DatabaseContext; // fixme inject! + public DatabaseContext DatabaseContext { get; } /// 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); } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index d0e40307ec..54e448ffeb 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -602,7 +602,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); var filterQuery = filter.IsNullOrWhiteSpace() ? null - : repository.QueryFactory.Create().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(); var filterQuery = filter.IsNullOrWhiteSpace() ? null - : repository.QueryFactory.Create().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); } } diff --git a/src/Umbraco.Core/Services/LocalizationService.cs b/src/Umbraco.Core/Services/LocalizationService.cs index 1d451bff12..8af730e677 100644 --- a/src/Umbraco.Core/Services/LocalizationService.cs +++ b/src/Umbraco.Core/Services/LocalizationService.cs @@ -201,7 +201,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.QueryFactory.Create().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); diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index a362b180b1..1f1aa274dc 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -469,7 +469,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); var filterQuery = filter.IsNullOrWhiteSpace() ? null - : repository.QueryFactory.Create().Where(x => x.Name.Contains(filter)); + : Query().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(); var filterQuery = filter.IsNullOrWhiteSpace() ? null - : repository.QueryFactory.Create().Where(x => x.Name.Contains(filter)); + : Query().Where(x => x.Name.Contains(filter)); return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery); } } diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 632dfd3296..a6906a7edb 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -1050,7 +1050,7 @@ namespace Umbraco.Core.Services throw new InvalidOperationException("The role " + roleName + " is currently assigned to members"); } - var query = repository.QueryFactory.Create().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) diff --git a/src/Umbraco.Core/Services/RepositoryService.cs b/src/Umbraco.Core/Services/RepositoryService.cs index 69fb93f797..4473619b89 100644 --- a/src/Umbraco.Core/Services/RepositoryService.cs +++ b/src/Umbraco.Core/Services/RepositoryService.cs @@ -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 Query() => UowProvider.DatabaseContext.Query(); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 1fbb343bea..3d22c3038a 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -640,7 +640,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.QueryFactory.Create().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(); - var query = repository.QueryFactory.Create().Where(x => x.Name == name); + var query = repository.Query.Where(x => x.Name == name); var type = repository.GetByQuery(query).SingleOrDefault(); uow.Complete(); return type; diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index d5e49365b0..7a6749d6a7 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -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); diff --git a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs index f3efc45fc5..55aa5e724b 100644 --- a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs +++ b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs @@ -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 Sql() + { + throw new NotImplementedException(); + } + public IQueryFactory QueryFactory => _queryFactory ?? (_queryFactory = new QueryFactory(SqlSyntax, _mappers)); public DatabaseType DatabaseType => DatabaseType.SQLCe; diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 3563295176..39cae728be 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -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()); - return new NPocoUnitOfWorkProvider(databaseFactory, repositoryFactory); + return new NPocoUnitOfWorkProvider(new DatabaseContext(databaseFactory), repositoryFactory); } } } diff --git a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs index 676ec9cf80..a900320fcd 100644 --- a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs @@ -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())) { /*IsReady = true*/ }; var cache = new NullCacheProvider(); - var provider = new NPocoUnitOfWorkProvider(databaseFactory, new RepositoryFactory(Mock.Of())); + var provider = new NPocoUnitOfWorkProvider(new DatabaseContext(databaseFactory), new RepositoryFactory(Mock.Of())); _service = new FacadeService(svcCtx, provider, cache, Enumerable.Empty(), null, Current.Logger, null, true, false); // no events var http = GetHttpContextFactory(url, routeData).HttpContext; diff --git a/src/Umbraco.Web/Editors/ContentController.cs b/src/Umbraco.Web/Editors/ContentController.cs index cbc9e668b1..110132e80e 100644 --- a/src/Umbraco.Web/Editors/ContentController.cs +++ b/src/Umbraco.Web/Editors/ContentController.cs @@ -175,7 +175,7 @@ namespace Umbraco.Web.Editors if (filter.IsNullOrWhiteSpace() == false) { //add the default text filter - queryFilter = DatabaseContext.QueryFactory.Create() + queryFilter = DatabaseContext.Query() .Where(x => x.Name.Contains(filter)); } diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index f7390d80e2..aa6cb7e360 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -166,7 +166,7 @@ namespace Umbraco.Web.Editors if (filter.IsNullOrWhiteSpace() == false) { //add the default text filter - queryFilter = DatabaseContext.QueryFactory.Create() + queryFilter = DatabaseContext.Query() .Where(x => x.Name.Contains(filter)); } diff --git a/src/Umbraco.Web/Install/InstallHelper.cs b/src/Umbraco.Web/Install/InstallHelper.cs index be376cb7a6..29ec330947 100644 --- a/src/Umbraco.Web/Install/InstallHelper.cs +++ b/src/Umbraco.Web/Install/InstallHelper.cs @@ -186,13 +186,13 @@ namespace Umbraco.Web.Install } //check if we have the default user configured already - var result = _databaseBuilder.DatabaseContext.Database.ExecuteScalar( + var result = _databaseBuilder.Database.ExecuteScalar( "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("SELECT COUNT(*) FROM umbracoUser"); + var usersResult = _databaseBuilder.Database.ExecuteScalar("SELECT COUNT(*) FROM umbracoUser"); return usersResult == 1; } diff --git a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs index a77985c17a..5f0b45e311 100644 --- a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs +++ b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs @@ -81,7 +81,7 @@ namespace Umbraco.Web.Install.InstallSteps { var errorReport = new List(); - 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(sql); + var list = _databaseBuilder.Database.Fetch(sql); foreach (var item in list) { Guid legacyId = item.controlId; diff --git a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs index 6f0e05fc75..4da8da67bd 100644 --- a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs @@ -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( + var result = _databaseBuilder.Database.ExecuteScalar( "SELECT COUNT(*) FROM umbracoUser WHERE id=0 AND userPassword='default'"); if (result == 1) {