2013-08-22 81 views
0

我已經按照以下步驟使用代碼第一種方法創建數據庫。EF代碼第一次移植

  1. 創建類
  2. 啓動包管理器
  3. 啓用的遷移-ContextTypeName -MyDb
  4. 在Model類
  5. 使變革
  6. 執行 '更新,數據庫-Verbose'
  7. 變化反映在數據庫表

現在我連接數據庫和de lete表。當我執行'Update-Database -Verbose'命令時,我的期望是它會再次創建表,但是它失敗並顯示下面的錯誤消息。

PM> Update-Database -Force 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
No pending code-based migrations. 
Applying automatic migration: 201308221453295_AutomaticMigration. 
System.Data.SqlClient.SqlException (0x80131904): Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong. 
    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.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading) 
    at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading) 
    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:d07c8463-88f6-44fa-a242-fe0da2c36f31 
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong. 

Can anyone help? How can I create table again using code first approach? 

問候, 與Hemant斯赫拉爾

+0

在您的項目中啓用遷移,然後查看其相關文章,如下所示:http://msdn.microsoft.com/en-us/data/jj591621.aspx –

回答

0

有一個系統表中包含所有運行遷移數據庫,因此重新運行Update-Database不應該做任何事情。除非您在項目中更改了模型,導致自動遷移,而您尚未明確創建遷移,並且實體框架試圖將數據庫與模型進行匹配。

正如Raphaël所說,它是代碼第一。如果您想要先通過代碼管理它,則不應該直接修改表。如果您真的想這樣做,您需要從__MigrationHistory系統表中刪除遷移,以便Entity Framework不認爲遷移已經運行。或者使用Update-Database -Target:[migration target here]通過commandlet降級/恢復數據庫。