运行Update-Database时出错

5 asp.net-mvc entity-framework ef-migrations

运行时出现以下错误Update-Database -Verbose:

使用StartUp项目'WebApplication'.使用NuGet项目'WebApplication'.指定'-Verbose'标志以查看应用于目标数据库的SQL语句.目标数据库是:'Frappuccino'(DataSource:(Localdb)\ v11.0,Provider:System.Data.SqlClient,Origin:Configuration).没有待定的显式迁移.应用自动迁移:201402032027563_AutomaticMigration.ALTER TABLE [dbo].[Clients] ALTER COLUMN [ID] [int] NOT NULL System.Data.SqlClient.SqlException(0x80131904):对象'PK_dbo.Clients'依赖于列'ID'.对象'FK_dbo.Users_dbo.Clients_Client_ID'取决于列'ID'.ALTER TABLE ALTER COLUMN ID失败,因为一个或多个对象访问此列.在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,动作1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1个wrapCloseInAction)在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)在System.Data.SqlClient.TdsParser. System.Data.SqlClient上的System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName,Boolean async,Int32 timeout,Boolean asyncWrite)中的TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady). 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.InternalDispatcher1.Dispatch [TInterceptionContext,TResult](Func键1 operation, TInterceptionContext interceptionContext, Action1执行,动作1个migrationStatements,的DbConnection连接)在System.Data.Entity.Migrations.DbMigrator.<> C_ DisplayClass32.b _2e()在System.Data. System.Data.Entity.SqlServer.DefaultSqlEx中的Entity.SqlServer.DefaultSqlExecutionStrategy.<> c_ DisplayClass1.b _0()ecutionStrategy.Execute [TResult](Func键1个migrationStatements)在System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable的1个操作,IEnumerable的1个pendingMigrations,字符串targetMigrationId,字符串lastMigrationId) 在System.Data.Entity.Migrations.Infrastructure .MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations,字符串targetMigrationId,字符串lastMigrationId) 在System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串targetMigration)在System.Data.Entity.Migrations.DbMigrator.<> C_ DisplayClassc.b _b ()在处System.Data.Entity.Migrations.DbMigrator.Update System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(动作mustSucceedToKeepDatabase)System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(动作mustSucceedToKeepDatabase)(字符串System.Data.Entity.Migrations.ToolingFacad上的System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)中的targetMigration 位于System.Data的System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)的System.AppDomain.Munrations.Design.ToolingFacade.Run(BaseRunner runner)的System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)中的e.UpdateRunner.Run(). Entity.Migrations.Design.ToolingFacade.Update(字符串targetMigration,布尔力)在System.Data.Entity.Migrations.UpdateDatabaseCommand.<> C_ DisplayClass2.<构造函数> b在System.Data.Entity.Migrations.MigrationsDomainCommand _0() .Execute(Action命令)ClientConnectionId:9854ba62-772c-4ba6-b185-ecae993e065f对象'PK_dbo.Clients'依赖于列'ID'.对象'FK_dbo.Users_dbo.Clients_Client_ID'取决于列'ID'.ALTER TABLE ALTER COLUMN ID失败,因为一个或多个对象访问此列.1 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) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable
1 operation) at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable1 systemOperations, 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



我之前做的是将ID我的Code-First Model类中的变量从更改Int16Int32.

有什么帮助吗?

mac*_*s01 8

看起来数据库无法更改/删除ID列,因为另一个表具有引用ID列的外键.如果删除引用,更新列,然后重新添加引用,你应该好好去...

  • **问题已解决**:删除所有_migration related_文件夹,文件和表格后,我重新启用"迁移"并按照您的说法重新填充数据库. (3认同)

Eri*_* J. 6

问题已解决:删除所有与迁移相关的文件夹,文件和表后,我重新启用迁移并重新填充数据库,如您所说

基于已接受的答案,以下是解决问题的具体步骤,而不会删除所有迁移或手动编辑迁移.

在我的情况下,我有

public class Parent
{
    public virtual ICollection<Child> A { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

必须将孩子的类型从Child更改为OtherChild.那是我遇到错误的时候.

为了解决这个问题,我创建了两个迁移.第一个从EF中取消映射属性A. 我本可以对它进行评论,但访问该属性的相当多的代码将无法编译.

public class Parent
{
    [NotMapped]
    public virtual ICollection<Child> A { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

添加迁移UnmapA

更新数据库

然后我重新映射了属性并更改了类型

public class Parent
{
    public virtual ICollection<OtherChild> A { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

add-migration ChangeChildType

更新数据库