2016-03-28 75 views
0

我試圖克隆具有標識角色的MVC5,並從此tutorial授權並且項目爲hereMVC5數據庫中已有一個名爲'AspNetUsers'的對象

我想在我的包管理器控制檯使用update-database但它口口聲聲說我有

已經有一個在數據庫中名爲「AspNetUsers」的對象。

但是,如果你在圖像中看,我沒有一個數據庫擁有這些表。

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" />

enter image description here

enter image description here

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(種子方法)

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(); 
     } 
    } 
} 
+0

你有沒有[檢查此](http://stackoverflow.com/questions/26305273/there-is-already-an-object-named-in-the-database) – TheUknown

回答

0

你在SQL Express數據庫中有一個包含AspNetUsers表的數據庫。您顯示的截圖是針對SQL Server的另一個實例,而不是連接字符串正在訪問的位置。

  • 截圖:(localdb)\MSSqlLocalDb
  • 連接字符串:.\SQLExpress(這是(local)\SQLExpress等效)

此外,作爲LoLeRji指出,你有沒有在連接字符串中指定的數據庫名。因此,您的表將在服務器實例(通常是主數據庫)的默認數據庫中創建。

在添加高級選項(如果有的話)之前,您應該始終確保您的連接字符串遵循2種模式之一。

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

參見:connectionstrings.com

+0

所以我刪除了數據庫的表,但它仍然出現了相同的錯誤。我的連接字符串應該是'<添加名稱= 「DefaultConnection」 的connectionString =「數據源= \ SQLEXPRESS \ RecreationalServicesTicketingSystem;集成安全性= TRUE;連接超時= 15;加密= FALSE; TrustServerCertificate = FALSE; ApplicationIntent =讀寫; MultiSubnetFailover =假「providerName =」System.Data.SqlClient「/>''? – TykiMikk

+0

不,這是不正確的。看到我的答案,您需要將數據庫指定爲單獨的屬性'DATABASE ='。斜槓後面的部分是實例名稱(如果有的話),在你的情況下它是'\ SQLEXPRESS'(這是SQL Express實例的默認位置)。 – NightOwl888

+0

我不知道爲什麼,但不知道爲什麼,但是''在刪除所有表後工作。 – TykiMikk

0

我不敢肯定這將是任何幫助,但是當我看了你的連接字符串,我看不出這你試圖連接到的數據庫。連接字符串僅聲明./SQLEXPRESS作爲數據源,但沒有給出數據庫名稱。

例如,據我所知連接字符串應該看起來像"data source=<dbserver>;initial catalog=<databasename>;...""data source=<path>\<dbname>;..."

我認爲問題在於您正在嘗試更新數據庫,但實體框架並不知道要更新哪個數據庫。

我希望這會有所幫助。

+0

'<添加名稱= 「DefaultConnection」 的connectionString =「數據源= \ SQLEXPRESS;初始目錄= RecreationalServicesTicketingSystem;集成安全性= TRUE;連接超時= 15;加密= FALSE; TrustServerCertificate = FALSE; ApplicationIntent = ReadWritË; MultiSubnetFailover =假「providerName =」System.Data.SqlClient「/>'? – TykiMikk

+0

是的,它應該是這樣的。在你的問題中的連接字符串沒有它,所以我認爲這可能是問題的原因。將初始目錄值添加到您的字符串中,並查看它是否可以解決問題。 – LoLeRji

+0

出於某種原因,'這個工作。 – TykiMikk

相關問題