Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enum type causes Update-Database throw an SqlException (Invalid column name) 5.0preview4 #21107

Closed
felaray opened this issue Jun 2, 2020 · 3 comments

Comments

@felaray
Copy link

felaray commented Jun 2, 2020

My project is code first.

When I add enum type in Model, then use the cmd "Add-Migration" , will throw SqlException when update database

Steps to reproduce

( tested work on efcore 3.1)

  1. Create a new model
namespace Lab.Models
{
    public class Test
    {
        public int TestId { get; set; }
    }
}
public class LabContext : DbContext
{
    public LabContext(DbContextOptions<LabContext> options): base(options)
    {
    }

    public DbSet<Lab.Models.Test> Test { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    }
}
  1. Use command "Add-Migration init"
  2. Use command "Update-Database"
  3. Edit model and add enum field (name TestEnum)
namespace Lab.Models
{
    public enum TestEnum
    {
        A = 1,
        B = 2,
        C = 3
    }
    public class Test
    {
        public int TestId { get; set; }
        public TestEnum TestEnum { get; set; }
    }
}
  1. Use command "Add-Migration test"
  2. Use command "Update-Database" -------> throw SqlException "Invalid column name 'TestEnum'."
PM> Update-Database
Build started...
Build succeeded.
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
      Failed executing DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      ALTER TABLE [Test] ADD CONSTRAINT [CK_Test_TestEnum_Enum_Constraint] CHECK ([TestEnum] IN(1, 2, 3));
Failed executing DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
ALTER TABLE [Test] ADD CONSTRAINT [CK_Test_TestEnum_Enum_Constraint] CHECK ([TestEnum] IN(1, 2, 3));
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid column name 'TestEnum'.
Invalid column name 'TestEnum'.
Invalid column name 'TestEnum'.
   at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at Microsoft.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean isAsync, Int32 timeout, Boolean asyncWrite)
   at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String methodName)
   at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:117d7b9b-9cb3-47d6-a147-f4f5a428259c
Error Number:207,State:1,Class:16
Invalid column name 'TestEnum'.
Invalid column name 'TestEnum'.
Invalid column name 'TestEnum'.

Further technical details

EF Core version: 5.0.0-preview.4.20220.10
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework:.NET Core 3.1
Operating system: windows 10
IDE: Visual Studio 2019 16.4.5

@felaray
Copy link
Author

felaray commented Jun 2, 2020

3.1.4 and 5.0 different

/// ef 3.1.4
namespace Lab.Migrations
{
    public partial class testef31 : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<int>(
                name: "TestEnum",
                table: "Test",
                nullable: false,
                defaultValue: 0);
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "TestEnum",
                table: "Test");
        }
    }
}

///ef 5.0 preivew 4
namespace Lab.Migrations
{
    public partial class testef5pre4 : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateCheckConstraint(
                name: "CK_Test_TestEnum_Enum_Constraint",
                table: "Test",
                sql: "[TestEnum] IN(1, 2, 3)");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropCheckConstraint(
                name: "CK_Test_TestEnum_Enum_Constraint",
                table: "Test");
        }
    }
}

@felaray felaray changed the title Enum type causes Update-Database throw an SqlException (Invalid column name) Enum type causes Update-Database throw an SqlException (Invalid column name) 5.0preview4 Jun 2, 2020
@ajcvickers
Copy link
Member

@roji to find dupe.

@roji
Copy link
Member

roji commented Jun 5, 2020

Duplicate of #21037

@roji roji marked this as a duplicate of #21037 Jun 5, 2020
@roji roji closed this as completed Jun 5, 2020
@ajcvickers ajcvickers reopened this Oct 16, 2022
@ajcvickers ajcvickers closed this as not planned Won't fix, can't repro, duplicate, stale Oct 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants