Started up new ABP template with Module Zero (ABP v3.6, .NET Core + MVC/jQuery)
As per docs, I built the solution, set the startup project to .MVC one, selected EF project as default in PM console, and did a update-database. DB created succcesfully,
When I try to run the project it stops with an exception:
SqlException: Invalid column name 'CreatorUserId1'.
Invalid column name 'DeleterUserId1'.
Invalid column name 'LastModifierUserId1'.
This happens when the following line tries to execute in the DefaultTenantBuilder.cs line 27
var defaultTenant = _context.Tenants.IgnoreQueryFilters().FirstOrDefault(t => t.TenancyName == AbpTenantBase.DefaultTenantName);
The following is the output from the log file:
FATAL 2018-04-16 01:01:03,726 [1 ] soft.AspNetCore.Hosting.Internal.WebHost - Application startup exception
System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'CreatorUserId1'.
Invalid column name 'DeleterUserId1'.
Invalid column name 'LastModifierUserId1'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource1 completion, Int32 timeout, Task& task, Boolean asyncWrite, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader() at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.BufferlessMoveNext(Boolean buffer)
at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.ExecuteTState,TResult
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.MoveNext() at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable1 source, Boolean& found)
at lambda_method(Closure , QueryContext )
at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass17_11.<CompileQueryCore>b__0(QueryContext qc) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 source, Expression1 predicate) at LegalReg.EntityFrameworkCore.Seed.Tenants.DefaultTenantBuilder.CreateDefaultTenant() in C:\Development\Projects\Private\LegalReg\src\LegalReg.EntityFrameworkCore\EntityFrameworkCore\Seed\Tenants\DefaultTenantBuilder.cs:line 27 at LegalReg.EntityFrameworkCore.Seed.Tenants.DefaultTenantBuilder.Create() in C:\Development\Projects\Private\LegalReg\src\LegalReg.EntityFrameworkCore\EntityFrameworkCore\Seed\Tenants\DefaultTenantBuilder.cs:line 20 at LegalReg.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(LegalRegDbContext context) in C:\Development\Projects\Private\LegalReg\src\LegalReg.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 28 at LegalReg.EntityFrameworkCore.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver iocResolver, Action1 contextAction) in C:\Development\Projects\Private\LegalRegsrc\LegalReg.EntityFrameworkCore\EntityFrameworkCoreSeedSeedHelper.cs:line 41
at LegalReg.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(IIocResolver iocResolver) in C:\Development\Projects\Private\LegalRegsrc\LegalReg.EntityFrameworkCore\EntityFrameworkCoreSeedSeedHelper.cs:line 17
at LegalReg.EntityFrameworkCore.LegalRegEntityFrameworkModule.PostInitialize() in C:\Development\Projects\Private\LegalRegsrc\LegalReg.EntityFrameworkCore\EntityFrameworkCore\LegalRegEntityFrameworkModule.cs:line 46
at System.Collections.Generic.List1.ForEach(Action1 action)
at Abp.AbpBootstrapper.Initialize() in D:\Github\aspnetboilerplatesrcAbpAbpBootstrapper.cs:line 160
at Abp.AspNetCore.AbpApplicationBuilderExtensions.UseAbp(IApplicationBuilder app, Action`1 optionsAction) in D:\Github\aspnetboilerplatesrcAbp.AspNetCoreAspNetCoreAbpApplicationBuilderExtensions.cs:line 37
at LegalReg.Web.Startup.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in C:\Development\Projects\Private\LegalRegsrc\LegalReg.Web.MvcStartupStartup.cs:line 62
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
at Microsoft.AspNetCore.ApplicationInsights.HostingStartup.ApplicationInsightsLoggerStartupFilter.<>c__DisplayClass0_1.b__0(IApplicationBuilder builder)
at Microsoft.ApplicationInsights.AspNetCore.ApplicationInsightsStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter.<>c__DisplayClass3_0.b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder builder)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
ClientConnectionId:4d8b22bd-f125-4c6e-8986-2e0dad2365d8
It's almost as if it doesn't pick up the existing user foreign keys on the Tenant entity, and tries to add new ones.
When I do an add-migration command I get the following output:
migrationBuilder.DropForeignKey(
name: "FK_AbpTenants_AbpUsers_CreatorUserId",
table: "AbpTenants");
migrationBuilder.DropForeignKey(
name: "FK_AbpTenants_AbpUsers_DeleterUserId",
table: "AbpTenants");
migrationBuilder.DropForeignKey(
name: "FK_AbpTenants_AbpUsers_LastModifierUserId",
table: "AbpTenants");
migrationBuilder.DropForeignKey(
name: "FK_AbpUsers_AbpUsers_CreatorUserId",
table: "AbpUsers");
migrationBuilder.DropForeignKey(
name: "FK_AbpUsers_AbpUsers_DeleterUserId",
table: "AbpUsers");
migrationBuilder.DropForeignKey(
name: "FK_AbpUsers_AbpUsers_LastModifierUserId",
table: "AbpUsers");
migrationBuilder.DropIndex(
name: "IX_AbpUserTokens_TenantId_UserId",
table: "AbpUserTokens");
migrationBuilder.DropIndex(
name: "IX_AbpUsers_CreatorUserId",
table: "AbpUsers");
migrationBuilder.DropIndex(
name: "IX_AbpUsers_DeleterUserId",
table: "AbpUsers");
migrationBuilder.DropIndex(
name: "IX_AbpUsers_LastModifierUserId",
table: "AbpUsers");
migrationBuilder.DropIndex(
name: "IX_AbpUsers_TenantId_NormalizedEmailAddress",
table: "AbpUsers");
migrationBuilder.DropIndex(
name: "IX_AbpUsers_TenantId_NormalizedUserName",
table: "AbpUsers");
migrationBuilder.DropIndex(
name: "IX_AbpUserRoles_TenantId_RoleId",
table: "AbpUserRoles");
migrationBuilder.DropIndex(
name: "IX_AbpUserRoles_TenantId_UserId",
table: "AbpUserRoles");
migrationBuilder.DropIndex(
name: "IX_AbpUserOrganizationUnits_TenantId_OrganizationUnitId",
table: "AbpUserOrganizationUnits");
migrationBuilder.DropIndex(
name: "IX_AbpUserOrganizationUnits_TenantId_UserId",
table: "AbpUserOrganizationUnits");
migrationBuilder.DropIndex(
name: "IX_AbpUserNotifications_UserId_State_CreationTime",
table: "AbpUserNotifications");
migrationBuilder.DropIndex(
name: "IX_AbpUserLogins_TenantId_UserId",
table: "AbpUserLogins");
migrationBuilder.DropIndex(
name: "IX_AbpUserLogins_TenantId_LoginProvider_ProviderKey",
table: "AbpUserLogins");
migrationBuilder.DropIndex(
name: "IX_AbpUserLoginAttempts_UserId_TenantId",
table: "AbpUserLoginAttempts");
migrationBuilder.DropIndex(
name: "IX_AbpUserLoginAttempts_TenancyName_UserNameOrEmailAddress_Result",
table: "AbpUserLoginAttempts");
migrationBuilder.DropIndex(
name: "IX_AbpUserClaims_TenantId_ClaimType",
table: "AbpUserClaims");
migrationBuilder.DropIndex(
name: "IX_AbpUserAccounts_EmailAddress",
table: "AbpUserAccounts");
migrationBuilder.DropIndex(
name: "IX_AbpUserAccounts_UserName",
table: "AbpUserAccounts");
migrationBuilder.DropIndex(
name: "IX_AbpUserAccounts_TenantId_EmailAddress",
table: "AbpUserAccounts");
migrationBuilder.DropIndex(
name: "IX_AbpUserAccounts_TenantId_UserId",
table: "AbpUserAccounts");
migrationBuilder.DropIndex(
name: "IX_AbpUserAccounts_TenantId_UserName",
table: "AbpUserAccounts");
migrationBuilder.DropIndex(
name: "IX_AbpTenants_CreatorUserId",
table: "AbpTenants");
migrationBuilder.DropIndex(
name: "IX_AbpTenants_DeleterUserId",
table: "AbpTenants");
migrationBuilder.DropIndex(
name: "IX_AbpTenants_LastModifierUserId",
table: "AbpTenants");
migrationBuilder.DropIndex(
name: "IX_AbpTenants_TenancyName",
table: "AbpTenants");
migrationBuilder.DropIndex(
name: "IX_AbpTenantNotifications_TenantId",
table: "AbpTenantNotifications");
migrationBuilder.DropIndex(
name: "IX_AbpSettings_TenantId_Name",
table: "AbpSettings");
migrationBuilder.DropIndex(
name: "IX_AbpRoles_TenantId_NormalizedName",
table: "AbpRoles");
migrationBuilder.DropIndex(
name: "IX_AbpRoleClaims_TenantId_ClaimType",
table: "AbpRoleClaims");
migrationBuilder.DropIndex(
name: "IX_AbpPermissions_TenantId_Name",
table: "AbpPermissions");
migrationBuilder.DropIndex(
name: "IX_AbpOrganizationUnits_TenantId_Code",
table: "AbpOrganizationUnits");
migrationBuilder.DropIndex(
name: "IX_AbpNotificationSubscriptions_NotificationName_EntityTypeName_EntityId_UserId",
table: "AbpNotificationSubscriptions");
migrationBuilder.DropIndex(
name: "IX_AbpNotificationSubscriptions_TenantId_NotificationName_EntityTypeName_EntityId_UserId",
table: "AbpNotificationSubscriptions");
migrationBuilder.DropIndex(
name: "IX_AbpLanguageTexts_TenantId_Source_LanguageName_Key",
table: "AbpLanguageTexts");
migrationBuilder.DropIndex(
name: "IX_AbpLanguages_TenantId_Name",
table: "AbpLanguages");
migrationBuilder.DropIndex(
name: "IX_AbpFeatures_EditionId_Name",
table: "AbpFeatures");
migrationBuilder.DropIndex(
name: "IX_AbpFeatures_TenantId_Name",
table: "AbpFeatures");
migrationBuilder.DropIndex(
name: "IX_AbpEntityChangeSets_TenantId_CreationTime",
table: "AbpEntityChangeSets");
migrationBuilder.DropIndex(
name: "IX_AbpEntityChangeSets_TenantId_Reason",
table: "AbpEntityChangeSets");
migrationBuilder.DropIndex(
name: "IX_AbpEntityChangeSets_TenantId_UserId",
table: "AbpEntityChangeSets");
migrationBuilder.DropIndex(
name: "IX_AbpEntityChanges_EntityTypeFullName_EntityId",
table: "AbpEntityChanges");
migrationBuilder.DropIndex(
name: "IX_AbpBackgroundJobs_IsAbandoned_NextTryTime",
table: "AbpBackgroundJobs");
migrationBuilder.DropIndex(
name: "IX_AbpAuditLogs_TenantId_ExecutionDuration",
table: "AbpAuditLogs");
migrationBuilder.DropIndex(
name: "IX_AbpAuditLogs_TenantId_ExecutionTime",
table: "AbpAuditLogs");
migrationBuilder.DropIndex(
name: "IX_AbpAuditLogs_TenantId_UserId",
table: "AbpAuditLogs");
migrationBuilder.AddColumn<long>(
name: "CreatorUserId1",
table: "AbpTenants",
nullable: true);
migrationBuilder.AddColumn<long>(
name: "DeleterUserId1",
table: "AbpTenants",
nullable: true);
migrationBuilder.AddColumn<long>(
name: "LastModifierUserId1",
table: "AbpTenants",
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "ServiceName",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Parameters",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 1024,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "MethodName",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Exception",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 2000,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "CustomData",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 2000,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "ClientName",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 128,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "ClientIpAddress",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 64,
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "BrowserInfo",
table: "AbpAuditLogs",
nullable: true,
oldClrType: typeof(string),
oldMaxLength: 256,
oldNullable: true);
migrationBuilder.CreateIndex(
name: "IX_AbpTenants_CreatorUserId1",
table: "AbpTenants",
column: "CreatorUserId1");
migrationBuilder.CreateIndex(
name: "IX_AbpTenants_DeleterUserId1",
table: "AbpTenants",
column: "DeleterUserId1");
migrationBuilder.CreateIndex(
name: "IX_AbpTenants_LastModifierUserId1",
table: "AbpTenants",
column: "LastModifierUserId1");
migrationBuilder.CreateIndex(
name: "IX_AbpFeatures_EditionId",
table: "AbpFeatures",
column: "EditionId");
migrationBuilder.AddForeignKey(
name: "FK_AbpTenants_AbpUsers_CreatorUserId1",
table: "AbpTenants",
column: "CreatorUserId1",
principalTable: "AbpUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_AbpTenants_AbpUsers_DeleterUserId1",
table: "AbpTenants",
column: "DeleterUserId1",
principalTable: "AbpUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_AbpTenants_AbpUsers_LastModifierUserId1",
table: "AbpTenants",
column: "LastModifierUserId1",
principalTable: "AbpUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
Any idea what could cause this issue?
I created a VueJS solution as well and it does not exhivit this strange behaviour, even though all the base classes look the same?
Hi @RiaanvE, when you run add-migration empty migration class should be created. Could you share what is the latest migration class name? (should be *_Upgraded_To_Abp_v3_5_0, if so you should run project without any issue)
Hi @alirizaadiyahsi , it does have the "*_Upgraded_To_Abp_v3_5_0" migration.
In the end I just deleted the project, and unzipped it again from the template download and now it seems to be working fine. I guess EF was having some kind of brainfart or something.
Thanks for the assistance, we can close this issue now.
In case someone else comes across this issue, I had overridden OnModelCreating but missed calling the base.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
Which for some reason caused it to duplicate a few of the Audit coulmns CreatorUserId1. Removing the unused override or adding the base call removed the duplicate:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
Most helpful comment
In case someone else comes across this issue, I had overridden OnModelCreating but missed calling the base.
protected override void OnModelCreating(ModelBuilder modelBuilder) { }Which for some reason caused it to duplicate a few of the Audit coulmns CreatorUserId1. Removing the unused override or adding the base call removed the duplicate:
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); }