Deal with FIXMEs in persistence layer

This commit is contained in:
Stephan
2016-11-30 19:23:20 +01:00
parent 800b60ad68
commit fe3b28261f
22 changed files with 120 additions and 112 deletions

View File

@@ -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>&nbsp;</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
{

View File

@@ -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;
}
}

View File

@@ -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)

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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>();
}
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);
}
}
}

View File

@@ -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;

View File

@@ -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));
}

View File

@@ -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));
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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)
{