How do i convert this code to work with Umbraco 8 IComponent
using Umbraco.Core;
using Umbraco.Core.Persistence;
public class TableCreationEvents : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
var databaseContext = applicationContext.DatabaseContext;
var databaseSchemaHelper = new DatabaseSchemaHelper(databaseContext.Database, applicationContext.ProfilingLogger.Logger, databaseContext.SqlSyntax);
if (!databaseSchemaHelper.TableExist<CustomTable>())
{
databaseSchemaHelper.CreateTable<CustomTable>(true);
}
}
}
I got this.
using Umbraco.Core;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
public class InstallerComposer : IUserComposer
{
public void Compose(Composition composition)
{
composition.Components().Append<CreateTableComponent>();
}
}
public class CreateTableComponent : IComponent
{
private ILogger _logger;
public CreateTableComponent(ILogger logger)
{
_logger = logger;
}
public void Initialize()
{
}
public void Terminate()
{
}
}
Thanks for posting. When i do use Migrate it seems that foreignkeys do not work.
First the Migration
using Project.Data;
using Umbraco.Core.Migrations;
namespace Project.Migration
{
public class CreateTableMigrationBase : MigrationBase
{
public CreateTableMigrationBase(IMigrationContext context) : base(context) { }
public override void Migrate()
{
if (!TableExists("pdStatus"))
{
Create.Table<Status>().Do();
}
if (!TableExists("pdAssignments"))
{
Create.Table<Assignment>().Do();
}
}
}
public class CreateTableMigrationPlan : MigrationPlan
{
public CreateTableMigrationPlan() : base("ProjectBlackMagic")
{
From(string.Empty).To<CreateTableMigrationBase>("1.0");
}
}
}
Then the Components
using Project.Migration;
using Umbraco.Core;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
using Umbraco.Core.Migrations;
using Umbraco.Core.Migrations.Upgrade;
using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
namespace Project.Components
{
public class CreateTableComponent : IComponent
{
private readonly IScopeProvider _scopeProvider;
private readonly IMigrationBuilder _migrationBuilder;
private readonly IKeyValueService _keyValueService;
private readonly ILogger _logger;
public CreateTableComponent(IScopeProvider scopeProvider, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService, ILogger logger)
{
_scopeProvider = scopeProvider;
_migrationBuilder = migrationBuilder;
_keyValueService = keyValueService;
_logger = logger;
}
public void Initialize()
{
var upgrader = new Upgrader(new CreateTableMigrationPlan());
upgrader.Execute(_scopeProvider, _migrationBuilder, _keyValueService, _logger);
}
public void Terminate() {}
}
public class InstallerComposer : IUserComposer
{
public void Compose(Composition composition)
{
composition.Components().Append<CreateTableComponent>();
}
}
}
Now the Data
using NPoco;
using Umbraco.Core.Persistence.DatabaseAnnotations;
namespace Project.Data
{
[TableName("pdStatus")]
[PrimaryKey("Id", AutoIncrement = true)]
public class Status
{
public int Id { get; set; }
[Length(80)]
[NullSetting(NullSetting = NullSettings.NotNull)]
public string Name { get; set; }
}
[TableName("pdAssignments")]
[PrimaryKey("Id", AutoIncrement = true)]
public class Assignment
{
public int Id { get; set; }
[NullSetting(NullSetting = NullSettings.NotNull)]
public string Note { get; set; }
[Reference(ReferenceType.Foreign, ColumnName = "FkStatusId", ReferenceMemberName = "Id")]
public Status Status { get; set; }
}
}
I also tried this
public class Assignment
{
public int Id { get; set; }
[ForeignKey(typeof(Status), Column = "Id", Name = "FK_pdAssignments_pdStatus")]
public int FkStatusId { get; set; }
[ResultColumn]
public Status Status { get; set; }
}
public class Assignment
{
public int Id { get; set; }
[Reference(ReferenceType.Foreign, ColumnName = "Id", ReferenceMemberName = "Id")]
public Status Status { get; set; }
}
All given the same error:
[BootFailedException: Boot failed: Umbraco cannot run. See Umbraco's log file for more details.
-> Umbraco.Core.Exceptions.BootFailedException: Boot failed.
-> System.InvalidOperationException: The sequence contains no corresponding elements
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
at Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxProviderBase`1.FormatType(ColumnDefinition column)
at Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxProviderBase`1.<>c__DisplayClass54_0.<Format>b__0(Func`2 action)
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.String.Join(String separator, IEnumerable`1 values)
at Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxProviderBase`1.Format(ColumnDefinition column)
at Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxProviderBase`1.Format(IEnumerable`1 columns)
at Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxProviderBase`1.Format(TableDefinition table)
at Umbraco.Core.Migrations.Expressions.Create.Table.CreateTableOfDtoBuilder.Do()
at Project.Migration.CreateTableMigrationBase.Migrate()
at Umbraco.Core.Migrations.MigrationBase.Umbraco.Core.Migrations.IMigration.Migrate()
at Umbraco.Core.Migrations.MigrationPlan.Execute(IScope scope, String fromState, IMigrationBuilder migrationBuilder, ILogger logger)
at Umbraco.Core.Migrations.Upgrade.Upgrader.Execute(IScopeProvider scopeProvider, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService, ILogger logger)
at Project.Components.CreateTableComponent.Initialize()
at Umbraco.Core.Composing.ComponentCollection.Initialize()
at Umbraco.Core.Runtime.CoreRuntime.Boot(IRegister register, DisposableTimer timer)]
Umbraco.Core.Exceptions.BootFailedException.Rethrow(BootFailedException bootFailedException) +226
Umbraco.Web.<>c.<Init>b__23_0(Object sender, EventArgs args) +35
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +200
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +132
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +73
How to get databaseschemahelper in umbraco 8
Hi all.
How do i convert this code to work with Umbraco 8 IComponent
I got this.
in this post they replied to me how to make the custom table
https://our.umbraco.com/forum/umbraco-8/95939-create-custom-tables-migration-umbracodatabase-npoco
Hi Marcio.
Thanks for posting. When i do use Migrate it seems that foreignkeys do not work.
First the Migration
Then the Components
Now the Data
I also tried this
All given the same error:
is working on a reply...
This forum is in read-only mode while we transition to the new forum.
You can continue this topic on the new forum by tapping the "Continue discussion" link below.