Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EF 5 Code Migration Errors: "There is already an object named _____ in the database"

Doing EF5 Code Migrations and have been having an odd recurring issue that is now keeping me from working. Tried to run update-database and received this error:

There is already an object named 'RequestStatus' in the database.

The verbose log dump:

PM> update-database -v
Using StartUp project 'LicensingWorkflow'.
Using NuGet project 'LicensingWorkflow'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'LicensingWorkflow.Models.LicenseWorkflowContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201311111934210_AddRequestStatusToContext].
Applying code-based migration: 201311111934210_AddRequestStatusToContext.
CREATE TABLE [dbo].[RequestStatus] (
    [Id] [bigint] NOT NULL IDENTITY,
    [Status] [nvarchar](max),
    CONSTRAINT [PK_dbo.RequestStatus] PRIMARY KEY ([Id])
)
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'RequestStatus' in the database.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 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.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, Boolean downgrading, Boolean auto)
   at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:38d030fa-496e-4091-88eb-49093d76da14
There is already an object named 'RequestStatus' in the database.

I've tried everything under the sun that I've found on Google. Things that I've tried and have not provided any results:

  • Trying to spin up a new database.
  • Deleting __MigrationHistory
  • This, this, and this.

The most infuriating part is that my coworker is in the same codebase and is not experiencing this issue at all. I'm using VS2012 and EF5's LocalDb.

Some Code For Reference

Database Initializer

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<LicenseWorkflowContext>());

DB Context

namespace LicensingWorkflow.Models {
    public class LicenseWorkflowContext : DbContext {

        public DbSet<License> Licenses { get; set; } 
        public DbSet<RequestHistory> RequestHistories { get; set; }
        public DbSet<RequestType> RequestTypes { get; set; }
        public DbSet<HistoryStatus> HistoryStatuses { get; set; }
        public DbSet<Request> Requests { get; set; }
        public DbSet<LicenseStatus> LicenseStatuses { get; set; }
        public DbSet<RequestEntryAnswerReference> RequestEntryAnswerReferences { get; set; }
        public DbSet<Comment> Comments { get; set; }
        public DbSet<SuretyBond> SuretyBonds { get; set; }
        public DbSet<RequestStatus> RequestStatuses { get; set; } 
    }
}

The RequestStatus that it is failing on.

namespace LicensingWorkflow.Models {
    public class RequestStatus {
        public long Id { get; set; }
        public string Status { get; set; }
    }
}

Which is a part of the Request Model

namespace LicensingWorkflow.Models {
    public class Request {
        public long Id { get; set; }
        public string RequesterId { get; set; }
        public string SupervisorId { get; set; }
        public DateTime RequestDate { get; set; }
        public long SurveyId { get; set; }
        public string WorkerId { get; set; }
        public long RequestTypeId { get; set; }
        public string State { get; set; }
        public List<Comment> Comments { get; set; }
        public RequestEntryAnswerReference ReqeustEntryAnswerReference { get; set; }
        public long? LicenseId { get; set; }
        public RequestStatus RequestStatus { get; set; }
    }
}

Seed Method / Configuration.cs

public sealed class Configuration : DbMigrationsConfiguration<LicensingWorkflow.Models.LicenseWorkflowContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
        }

        protected override void Seed(LicensingWorkflow.Models.LicenseWorkflowContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );license branch renewal deficiency surrender
            //



            var status1 = new LicenseStatus { Id = 1, Status = "ok" };
            var status2 = new LicenseStatus { Id = 2, Status = "deficient" };
            var status3 = new LicenseStatus{Id = 3, Status = "inactive"};
            context.LicenseStatuses.AddOrUpdate(
                ls => ls.Id,
                status1,
                status2,
                status3
            );

            var license = new License {
                Id = 1,
                LicenseStatus = new LicenseStatus {Status = "ok"},
                LicenseNumber = 12345,
                OwnerId = "022567",
                ObtainedDate = new DateTime(2012, 10, 3),
                ExpirationDate = new DateTime(2013, 12, 12),
                State = "Minnesota",
                Type = "individual"
            };
            var license2 = new License {
                Id = 2,
                LicenseStatus = new LicenseStatus {Status = "deficient"},
                LicenseNumber = 12346,
                OwnerId = "022567",
                ObtainedDate = new DateTime(2012, 10, 3),
                ExpirationDate = new DateTime(2013, 12, 12),
                State = "Texas",
                Type = "individual"
            };

            var license3 = new License {
                Id = 3,
                LicenseStatus = new LicenseStatus { Status = "ok" },
                LicenseNumber = 12347,
                OwnerId = "025253",
                ObtainedDate = new DateTime(2012, 10, 3),
                ExpirationDate = new DateTime(2013, 12, 12),
                State = "Minnesota",
                Type = "individual"
            };
            var license4 = new License {
                Id = 4,
                LicenseStatus = new LicenseStatus { Status = "deficient" },
                LicenseNumber = 12348,
                OwnerId = "025253",
                ObtainedDate = new DateTime(2012, 10, 3),
                ExpirationDate = new DateTime(2013, 12, 12),
                State = "Texas",
                Type = "individual"
            };

            context.Licenses.AddOrUpdate(
                l => l.Id,
                license,
                license2
            );

            context.RequestTypes.AddOrUpdate(
                rt => rt.Id,
                new RequestType { Id = 1, Type = "license" },
                new RequestType { Id = 2, Type = "renewal" },
                new RequestType { Id = 3, Type = "deficiency" },
                new RequestType { Id = 4, Type = "surrender" },
                new RequestType { Id = 5, Type = "branch" },
                new RequestType { Id = 6, Type = "doNotRenew"}
            );

            var requestStatus1 = new RequestStatus() {
                Id = 1,
                Status = "submitted"
            };

            var requestStatus2 = new RequestStatus() {
                Id = 2,
                Status = "approved"
            };

            var requestStatus3 = new RequestStatus() {
                Id = 3,
                Status = "processing"
            };

            var requestStatus4 = new RequestStatus() {
                Id = 4,
                Status = "completed"
            };

            var requestStatus5 = new RequestStatus() {
                Id = 5,
                Status = "withdrawn"
            };

            var requestStatus6 = new RequestStatus() {
                Id = 6,
                Status = "denied"
            };

            context.RequestStatuses.AddOrUpdate(
                rs => rs.Id,
                requestStatus1,
                requestStatus2,
                requestStatus3,
                requestStatus4,
                requestStatus5,
                requestStatus6
            );

            var request1 = new Request {
                Id = 1,
                RequesterId = "123",
                RequestDate = DateTime.Now,
                RequestTypeId = 1,
                SupervisorId = "022567",
                State = "California",
                WorkerId = "",
                SurveyId = 62
            };

            var unassignedRequest1 = new Request{
                Id = 2,
                RequesterId = "123",
                RequestDate = DateTime.Now,
                RequestTypeId = 1,
                SupervisorId = "022567",
                State = "NewMexico",
                WorkerId = ""
            };

            var unassignedRequest2 = new Request {
                Id = 3,
                RequesterId = "123",
                RequestDate = DateTime.Now,
                RequestTypeId = 1,
                SupervisorId = "123",
                State = "Missouri",
                WorkerId = ""
            };

            var unassignedRequest3 = new Request {
                Id = 4,
                RequesterId = "123",
                RequestDate = DateTime.Now,
                RequestTypeId = 1,
                SupervisorId = "123",
                State = "Florida",
                WorkerId = ""
            };

            context.Requests.AddOrUpdate(
                r => r.Id,
                unassignedRequest1,
                unassignedRequest2,
                unassignedRequest3,
                request1
            );

            var requestEntryAnswerReference = new RequestEntryAnswerReference {
                Id = 1,
                RequestId = 1,
                ReferenceKey = "xxxxx-xxxxx-xxxxxx-xxxxx"
            };

            context.RequestEntryAnswerReferences.AddOrUpdate(
                r => r.Id,
                requestEntryAnswerReference
            );

            var comment1 = new Comment(){
                Id = 1,
                CommentText = "Test test test",
                CommenterId = "123",
                PostedDate = DateTime.Now,
                RequestId = 1
            };

            var comment2 = new Comment() {
                Id = 2,
                CommentText = "Test test test",
                CommenterId = "123",
                PostedDate = DateTime.Now,
                RequestId = 1
            };

            var comment3 = new Comment() {
                Id = 3,
                CommentText = "Test test test",
                CommenterId = "123",
                PostedDate = DateTime.Now,
                RequestId = 1
            };

            context.Comments.AddOrUpdate(
                r => r.Id,
                comment1,
                comment2,
                comment3
            );

            request1.Comments = new List<Comment> {
                comment1,
                comment2,
                comment3
            };

            context.Requests.AddOrUpdate(
                r => r.Id,
                request1
            );

            var hstatus1 = new HistoryStatus() { Id = 1, Status = "approved" };
            var hstatus2 = new HistoryStatus() { Id = 2, Status = "denied" };
            var hstatus3 = new HistoryStatus() { Id = 3, Status = "completed" };
            var hstatus4 = new HistoryStatus() { Id = 4, Status = "withdrawl" };
            var hstatus5 = new HistoryStatus() { Id = 5, Status = "assigned" };
            var hstatus6 = new HistoryStatus() { Id = 6, Status = "unassigned" };

            context.HistoryStatuses.AddOrUpdate(
                hs => hs.Id,
                hstatus1,
                hstatus2,
                hstatus3,
                hstatus4,
                hstatus5,
                hstatus6
            );
        }
    }
}
like image 934
mmcclannahan Avatar asked Nov 13 '13 21:11

mmcclannahan


1 Answers

Make sure the name of the connection string is the same as the DbContext you are trying to update. In other words you are trying to modify an existing database.

like image 96
stink Avatar answered Nov 04 '22 03:11

stink