简体   繁体   中英

MVC5 There is already an object named 'AspNetUsers' in the database

I'm trying to clone a MVC5 with Identity Roles and Authorize from this tutorial and the project is here .

I'm trying to use update-database in my Package Manager Console but it keeps saying I have

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

But if you look in the image I don't have a database that has those tables.

WebConfig connectionstring

<add name="DefaultConnection" connectionString="Data Source=.\\SQLEXPRESS;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" />

在此处输入图片说明

在此处输入图片说明

PM> Update-Database 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201603280555304_InitialCreate].
Applying explicit migration: 201603280555304_InitialCreate.
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'AspNetUsers' 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, Boolean asyncWrite)
   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.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c)
   at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction)
   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, IEnumerable`1 systemOperations, 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.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   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.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:2640ae66-2469-42f1-92ad-2895d26f73e4
Error Number:2714,State:6,Class:16
There is already an object named 'AspNetUsers' in the database.

Configuration.cs(Seed Method)

namespace RecreationalServicesTicketingSystem.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using RecreationalServicesTicketingSystem.Models;
    using System.Collections.Generic;

    internal sealed class Configuration : DbMigrationsConfiguration<RecreationalServicesTicketingSystem.Models.ApplicationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(ApplicationDbContext context)
        {
            var departments = new List<Department>
            {
                new Department { DepartmentID = 1, DepartmentName = "IT"},
                new Department { DepartmentID = 2, DepartmentName = "Menzit Admin" },
                new Department { DepartmentID = 3, DepartmentName = "Human Resources"},
                new Department { DepartmentID = 4, DepartmentName = "Mechanics" },
                new Department { DepartmentID = 5, DepartmentName = "Directors" },
                new Department { DepartmentID = 6, DepartmentName = "Operations"}

            };
            departments.ForEach(s => context.Departments.AddOrUpdate(p => p.DepartmentName, s));
            context.SaveChanges();


            var depots = new List<Depot>
            {
                new Depot { DepotID = 1, DepotName = "Porana"},
                new Depot { DepotID = 2, DepotName = "Far North"},
                new Depot { DepotID = 3, DepotName = "Horowhenua"},
                new Depot { DepotID = 4, DepotName = "Manawatu"},
                new Depot { DepotID = 5, DepotName = "Silverdale"},
                new Depot { DepotID = 6, DepotName = "Christchurch"},

            };
            depots.ForEach(s => context.Depots.AddOrUpdate(p => p.DepotName, s));
            context.SaveChanges();

            var users = new List<ApplicationUser>
        {
            new ApplicationUser { FirstMidName = "Jason",   LastName = "Wan",
                EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1, DepotID = 1,IsAdministrator = true},
            new ApplicationUser { FirstMidName = "Andy", LastName = "Domagas",
                EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1,DepotID = 1,IsAdministrator = true},
            new ApplicationUser { FirstMidName = "Denis",   LastName = "Djohar",
                EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1 ,DepotID = 1,IsAdministrator = true },
            new ApplicationUser { FirstMidName = "Christine",   LastName = "West",
                EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 2, DepotID = 3,IsAdministrator = false},

        };


            users.ForEach(s => context.Users.AddOrUpdate(p => p.FirstMidName, s));
            context.SaveChanges();

            users.ForEach(s => context.Users.AddOrUpdate(p => p.LastName, s));
            context.SaveChanges();




            var categories = new List<Category>
            {
                new Category {CategoryID = 0001, CategoryName = "Desktop"},
                new Category {CategoryID = 0002, CategoryName = "Mobile"},
                new Category {CategoryID = 0003, CategoryName = "Menzits"},
                new Category {CategoryID = 0004, CategoryName = "XMPRO"},
                new Category {CategoryID = 0005, CategoryName = "Con-X"},
                new Category {CategoryID = 0006, CategoryName = "Promapp"},
                new Category {CategoryID = 0007, CategoryName = "QGIS"},
            };
            categories.ForEach(s => context.Categories.AddOrUpdate(p => p.CategoryName, s));
            context.SaveChanges();

            var tickets = new List<Ticket>
            {
                new Ticket {
                    UserID = users.Single(s => s.LastName == "Wan").Id, //UserID
                    CategoryID = categories.Single(c => c.CategoryName == "Con-X" ).CategoryID,
                    Issue = ("Con-X Login Error"),
                    Priority = Priority.High
                },
                new Ticket {
                    UserID = users.Single(s => s.LastName == "Wan").Id, //UserID
                    CategoryID = categories.Single(c => c.CategoryName == "Desktop" ).CategoryID,
                    Issue = ("Can't remote access C0123"),
                    Priority = Priority.Med
                },
            };


            foreach (Ticket e in tickets)
            {
                var ticketInDataBase = context.Tickets.Where(
                    s =>
                        s.User.Id == e.UserID && //UserID
                        s.Category.CategoryID == e.CategoryID).SingleOrDefault();
                if (ticketInDataBase == null)
                {
                    context.Tickets.Add(e);
                }
            }
            context.SaveChanges();
        }
    }
}

You DO have a database with an AspNetUsers table in your SQL Express database. The screenshot you are showing is for a different instance of SQL Server than where your connection string is accessing.

  • Screenshot: (localdb)\\MSSqlLocalDb
  • Connection string: .\\SQLExpress (which is the equivalent of (local)\\SQLExpress )

Also, as LoLeRji pointed out, you haven't specified a database name in your connection string. Therefore, your tables will be created in the default database on the server instance (usually the master database).

You should always make sure your connection string follows one of the 2 patterns before adding the advanced options (if any).

  • SERVER=<servername\\instancename>;DATABASE=<databasename>;UID=<username>;PWD=<password>;
  • SERVER=<servername\\instancename>;DATABASE=<databasename>;Integrated Security=true;

See: connectionstrings.com

I am not so sure this would be of any help, but when I read your connection string, I couldn't see which database you were trying to connect to. The connection string only states ./SQLEXPRESS as data source, but no database names are given.

For example, as far as I know the connection strings should look like either "data source=<dbserver>;initial catalog=<databasename>;..." or "data source=<path>\\<dbname>;..." .

I think the problem is you are trying to update a database but entity framework doesn't know which db to update.

I hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM