c# - EF 6 Code First 中的更新数据库错误
问题描述
我无法自己处理这种情况,也无法在网上找到解决方案,所以我在那里问,希望有人遇到过这个问题。我有一个一年多的项目,这周我开始把所有东西都放在那里,因为上下文类的代码不可读。我不知道这是否是我的问题的开始,但在那之后(以及数据库代码的更新)我无法创建新的迁移,我试图继续更新 -数据库命令,如果我回去一切都很好,但如果我继续它工作但给我这个错误:
PM> Update-Database -TargetMigration:Profili
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [202002031249206_Profili].
Applying explicit migration: 202002031249206_Profili.
System.InvalidOperationException: La sequenza contiene più elementi corrispondenti
in System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
in System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<>c__DisplayClass260.<FindAlteredColumns>b__257(<>f__AnonymousType2d`2 <>h__TransparentIdentifier252)
in System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
in System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
in System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
in System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
in System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(ModelMetadata source, ModelMetadata target, Lazy`1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
in System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, Lazy`1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
in System.Data.Entity.Migrations.DbMigrator.IsModelOutOfDate(XDocument model, DbMigration lastMigration)
in System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
in System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
in System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
in System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse.<Update>b__d()
in System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
in System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
in System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
in System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
in System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
in System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
La sequenza contiene più elementi corrispondenti
PM>
我试图在一个新的空数据库上一次应用一个迁移,同样的错误,在一年前创建的迁移上,试图消除第一个出现此错误的迁移,因为它创建了一个我不使用的表,我已经删除了这个但仍然在下一个上给出了这个错误,所以我试图删除最后一个不会给出错误的,它改变了 2 列,无事可做,当我继续时,同样的错误。
在他完成更新后,它似乎做了一个 SingleOrDefault,但我不知道他做了什么。在 Add-Migration 命令之前调用了相同的函数,因此不会创建迁移。
我可以尝试什么?
编辑:@Donal 这是给我这个问题的第一个迁移的代码:
namespace EF_Produser.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class Profili : DbMigration
{
public override void Up()
{
AddColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_FL_LINGUA", c => c.Int());
AddColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_LINGUA_UI", c => c.String(nullable: false, maxLength: 25));
AddColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_LINGUA_CONT", c => c.String(nullable: false, maxLength: 25));
AddColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_FL_CATART", c => c.Int());
AddColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_FL_ANAG", c => c.Int());
}
public override void Down()
{
DropColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_FL_ANAG");
DropColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_FL_CATART");
DropColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_LINGUA_CONT");
DropColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_LINGUA_UI");
DropColumn("PRODUSER.SYS_ABPRF_PROFILI", "ABPRF_FL_LINGUA");
}
}
}
没什么奇怪的,不是吗?对于唯一键...每个文件都以时间戳开头,如果是这样就可以了。
解决方案
推荐阅读
- ios - 传递 NSObject 类型的字符串
- node.js - 如何使用 node js 服务器从 postresql 查询中读取结果?
- r - R包extrafont :: font_import()未完成
- c++ - 在 C++ 中使用数组实现队列
- r - R dplyr::ntile vs ggplot2::cut_number
- google-sheets - 格式化日期和时间
- linux - 调用 gcc 标志 -lm -g 和 -o 是什么,它们有什么作用?
- javascript - 从 JavaScript 数组中提取特定数据
- r - 如何重新排序 geom_bar 图表的条形?
- php - 在 Laravel 中为邮件添加自定义属性