数据库中已经有一个命名的对象


115

从程序包管理器控制台更新数据库失败。我使用了Entity Framework 6.x和代码优先方法。错误是

“数据库中已经有一个名为“ AboutUs”的对象。”

我怎么解决这个问题?

internal sealed class Configuration 
    : DbMigrationsConfiguration<Jahan.Blog.Web.Mvc.Models.JahanBlogDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = false;
    }

    protected override void Seed(Jahan.Blog.Web.Mvc.Models.JahanBlogDbContext context)
    {

    }
}

我的DbContext是:

public class JahanBlogDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
    public JahanBlogDbContext()
        : base("name=JahanBlogDbConnectionString")
    {
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<JahanBlogDbContext>());
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Comment>().HasRequired(t => t.Article).WithMany(t => t.Comments).HasForeignKey(d => d.ArticleId).WillCascadeOnDelete(true);
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<User>().ToTable("User");
        modelBuilder.Entity<Role>().ToTable("Role");
        modelBuilder.Entity<UserRole>().ToTable("UserRole");
        modelBuilder.Entity<UserLogin>().ToTable("UserLogin");
        modelBuilder.Entity<UserClaim>().ToTable("UserClaim");
    }

    public virtual DbSet<Article> Articles { get; set; }
    public virtual DbSet<ArticleLike> ArticleLikes { get; set; }
    public virtual DbSet<ArticleTag> ArticleTags { get; set; }
    public virtual DbSet<AttachmentFile> AttachmentFiles { get; set; }
    public virtual DbSet<Comment> Comments { get; set; }
    public virtual DbSet<CommentLike> CommentLikes { get; set; }
    public virtual DbSet<CommentReply> CommentReplies { get; set; }
    public virtual DbSet<ContactUs> ContactUs { get; set; }
    public virtual DbSet<Project> Projects { get; set; }
    public virtual DbSet<ProjectState> ProjectStates { get; set; }
    public virtual DbSet<ProjectTag> ProjectTags { get; set; }
    public virtual DbSet<Rating> Ratings { get; set; }
    public virtual DbSet<Tag> Tags { get; set; }
    public virtual DbSet<AboutUs> AboutUs { get; set; }
}

软件包管理控制台:

PM> update-database -verbose -force
Using StartUp project 'Jahan.Blog.Web.Mvc'.
Using NuGet project 'Jahan.Blog.Web.Mvc'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'Jahan-Blog' (DataSource: (local), Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
Applying automatic migration: 201410101740197_AutomaticMigration.
CREATE TABLE [dbo].[AboutUs] (
    [Id] [int] NOT NULL IDENTITY,
    [Description] [nvarchar](max),
    [IsActive] [bit] NOT NULL,
    [CreatedDate] [datetime],
    [ModifiedDate] [datetime],
    CONSTRAINT [PK_dbo.AboutUs] PRIMARY KEY ([Id])
)
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'AboutUs' 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.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel 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.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:88b66414-8776-45cd-a211-e81b2711c94b
There is already an object named 'AboutUs' in the database.
PM> 

我该怎么做(映射到现有设计)?
赛义德·鲁拉·阿勒姆(Royullah Allem)2014年

15
@HLGEM,如果可以使用EF将“精心设计的数据库”映射到对象模型,则EF也无法生成它。数据库迁移是一个功能强大的工具,可简化数据库的部署。我不建议您避免使用数据库迁移。否则无论如何都需要补丁脚本。我建议正确使用数据库迁移。
伊利亚·帕金

Answers:


129

在迁移过程中似乎存在问题,请在“ Package Manager控制台”中运行add-migration命令:

Add-Migration初始-IgnoreChanges

进行一些更改,然后从“初始”文件更新数据库:

更新数据库-详细

编辑: -IgnoreChanges在EF6中,但不在EF Core中,这是一种解决方法:https : //stackoverflow.com/a/43687656/495455


8
这到底是做什么的?这是否允许新模型覆盖旧模型?
特拉维斯·塔布斯

1
我开始使用手动迁移,因为我在数据库中使用了Views和Tables。我犯了尝试使用自动迁移的错误,因此它试图从视图创建表。在这种情况下,您的解决方案无效,我应该始终使用手动迁移。因此,执行此操作后,我必须撤消源代码管理中的更改,并从_Migrations表中删除“初始”条目。
arame3333 '17

3
这只会导致我陷入无限循环:Package Manager Console不允许我执行Add-Migration,因为它给出了错误“无法生成显式迁移,因为以下显式迁移正在等待中……”,即InitialCreate。但是,如果我无法成功运行该Update-Database UNTIL,那么还有一些Initial -IgnoreChanges,那我应该怎么办?
茫茫荒野之东'18

6
Add-Migration:找不到与参数名称“ IgnoreChanges”匹配的参数。
Tzvi Gregory凯达诺夫

3
@TravisTubbs会忽略您所做的更改,并忽略关于迁移表的模型与数据库同步的“伪造”。您仍然需要手动同步两者;在我的情况下,在执行更新数据库之前,我删除了对模型所做的更改,执行了Add-Migration,从up / down方法中删除了内容-这使我回到了中断迁移之前的状态。然后我实际上重新添加的变化,确实添加了迁移,并更新数据库像往常一样-这一切时间同步
大卫Refaeli

73

也许您已经更改了项目中的名称空间!
您的数据库中有一个名为的表dbo.__MigrationHistory。该表有一个名为的列ContextKey
此列的值基于namespace。例如“ DataAccess.Migrations.Configuration”。
更改名称空间时,它将导致使用不同名称空间的重复表名。
因此,在代码端更改名称空间后,也要更改数据库中此表的名称空间(对于所有行)。
例如,如果将名称空间更改为EFDataAccess,则应将ContextKey列中的值更改dbo.__MigrationHistory为“ EFDataAccess.Migrations.Configuration”。
然后在代码端的Tools => Package Manager Console中,使用update-database命令。

除了更改数据库中的上下文值之外,另一种选择是将代码中的上下文值硬编码为旧的名称空间值。这可以通过继承来实现,DbMigrationsConfiguration<YourDbContext>并且在构造函数中仅将旧的上下文值分配给ContextKey,而不是从继承MigrateDatabaseToLatestVersion<YourDbContext, YourDbMigrationConfiguration>并将该类留空。最后要做的是Database.SetInitializer(new YourDbInitializer());在静态构造函数中的DbContext中调用。

希望您的问题得到解决。


9
太好了,我们确实遇到了这个问题!
奥利维尔·罗曼德

3
实际上,这是此错误的真正原因。EF试图创建数据库,因为由于名称空间差异而无法读取应用于数据库的哪些迁移
UfukSURMEN

就像奥利维尔·罗曼德(Olivier ROMAND)所说,感谢这个回答对我有很大帮助,我确实遇到了这个问题!
Enrique A. Pinelo Novelo

我不知道它与此有关,但是以某种方式,即使删除MigrationHistory表的记录也无法解决我的问题……所以我放弃了所有表,让EF重新创建了所有em,小型应用程序,没什么大不了的。 ..但它为我解决了。
Niklas

这是带有详细信息的正确答案,还很值得一提的是,有时拼写错误的文件夹名称会导致此问题。
H35am

17

“数据库中已经有一个名为“ AboutUs”的对象。”

该异常告诉您已经有人在数据库中添加了一个名为“ AboutUs”的对象。

AutomaticMigrationsEnabled = true;可能导致这种情况,因为在这种情况下,数据库版本不受您的控制。为了避免不可预测的迁移,并确保团队中的每个开发人员都使用相同的数据库结构,建议您进行设置AutomaticMigrationsEnabled = false;

如果您非常小心并且项目中只有一位开发人员,那么自动迁移和编码迁移可以同时进行。

数据开发人员中心上的“自动代码优先迁移”帖子中有一个报价

自动迁移允许您使用代码优先迁移,而无需在项目中为所做的每次更改添加代码文件。并非所有更改都可以自动应用-例如,列重命名需要使用基于代码的迁移。

团队环境建议

您可以穿插自动迁移和基于代码的迁移,但是在团队开发方案中不建议这样做。如果您是使用源代码管理的开发人员团队的成员,则应该使用纯自动迁移或纯基于代码的迁移。鉴于自动迁移的局限性,我们建议在团队环境中使用基于代码的迁移。


12

就我而言,我的EFMigrationsHistory表被清空了(以某种方式),并且在尝试运行时update-database会得到:

数据库中已经有一个名为“ AspNetUsers”的对象

看到表已清空后,就可以知道它正在尝试重新运行初始迁移并试图重新创建表。

为了解决这个问题,我在EFMigrationsHistory表中添加了行。我知道数据库是最新的每个迁移都有1行。

一行将有2列:MigrationIdProductVersion

MigrationId是您的迁移文件的名称。例:20170628112345_Initial

ProductVersion是您正在运行的ef版本。您可以通过Get-Package在Package Manager Console中键入并查找ef软件包来找到它。

希望这对某人有帮助。


1
您是如何填充“模型”列的?
Ciaran Gallagher

7

在我的情况下,我已经重命名了包含代码优先实体框架模型的程序集。尽管实际的架构在所有迁移表中都没有改变

dbo.__MigrationHistory

包含基于程序集名称的已执行迁移的列表。我在迁移表中更新了旧名称,以匹配新名称,然后迁移又可以正常工作。


5

确保您的解决方案启动项目在配置文件中具有正确的连接字符串。或在执行update-database命令时设置-StartUpProjectName参数。-StartUpProjectName参数指定用于命名连接字符串的配置文件。如果省略,则使用指定项目的配置文件。

这是ef-migration命令参考的链接 http://coding.abel.nu/2012/03/ef-migrations-command-reference/


这个答案导致我犯了错误,我只是将错误的项目作为Startup项目。
Martin Johansson,

我遇到了类似的问题,这对我来说已经解决了。
约旦TDN

3

我遇到了同样的问题,经过三个小时的努力,我发现发生了什么事

就我而言,当我想首次迁移up()方法时,默认代码想要创建已经存在的表,因此我遇到了与您相同的错误

要解决此问题,只需删除这些代码并编写所需的代码即可。例如,我想添加一列,所以我只写

migrationBuilder.AddColumn<string>(
            name: "fieldName",
            table: "tableName",
            nullable: true);

看起来不错的答案,但您可能需要检查拼写。您还可以使用代码段来明确最后一行是代码。如果需要帮助,请给我发消息。
Mike Poole

谢谢我如何给您按摩
arfa

1
添加代码段@arfa做得很好。无需按摩:)。如果您想给我发消息,只需@在评论部分输入我的用户名。
Mike Poole

3

注意:不建议使用解决方案。但在某些情况下可以快速解决。

对我而言,dbo._MigrationHistory生产数据库在发布过程中丢失了迁移记录,但是开发数据库具有所有迁移记录。

如果您确定生产db与dev db相比具有相同和最新的架构,则将所有迁移记录复制到生产db可以解决此问题。

您只能使用VisualStudio。

  1. 打开“ SQL Server对象资源管理器”面板>右键单击dbo._MigrationHistory源(在我的情况下为dev db)数据库中的表>单击“数据比较...”菜单。
  2. 然后,弹出“数据比较”向导,选择目标数据库(在我的情况下是生产数据库),然后单击“下一步”。
  3. 几秒钟后,它将仅在源数据库中显示一些记录。只需点击“更新目标”按钮即可。
  4. 在浏览器中,单击刷新按钮,然后查看错误消息。

注意,同样,不建议在复杂而严肃的项目中使用。仅当您在ASP.Net或EntityFramework学习期间遇到问题时才使用此功能。


1
这对我有用。但是,这是另一回事。我的生产数据库中的所有记录都在__EFMigrationHistory中,而在开发数据库中的记录却以某种方式丢失了(最初的记录除外)。
詹斯·曼德


1

就我而言,问题出在Seeder中。我在其中调用了_ctx.Database.EnsureCreated(),据我了解,更新数据库命令已成功执行,但随后Seeded尝试创建数据库“第二次”。

解决方法:

  1. 不要运行更新,只需启动应用程序并调用SecureCreated()。数据库将被创建/更新
  2. 注释掉或删除播种器。

1

另一个极端情况下的EF核心方案。

检查您是否具有Migrations / YOURNAMEContextModelSnapshot.cs文件。

如-https: //docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#create-a-migration中所述

如果您尝试通过删除migration.cs文件来手动重新创建数据库,请注意您的Migrations / * ContextModelSnapshot.cs文件仍然存在。

没有它,您的后续迁移将没有快照来创建所需的差异,并且新的迁移文件看起来就像它们从头开始重新创建所有内容一样,然后您将得到上述现有的表错误。


1

同样的事情发生在我身上。问题是实际上我删除了数据库表MoviesCast并创建了新表,问题是我的上一次迁移正试图MoviesCast在数据库中引入已删除的表。我通过简单地删除上一次迁移的所有内容并仅运行Up()和down()方法解决了该问题

public override void Up()
{
}

public override void Down()
{
}

然后更新数据库,只需添加新的迁移


1

我有与Elnaz给出的答案相同的问题。我需要在重构项目期间更改数据层的名称空间。这导致迁移看不到数据库中的现有迁移。James Chambers在博客中找到了一个很好的答案。

http://jameschambers.com/2014/02/changing-the-namespace-with-entity-framework-6-0-code-first-databases/

我只是在“迁移”配置文件中更改了以下内容。

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    this.ContextKey = Old_Namespace.Migrations.Configuration”;
}

希望这可以帮助其他人。


命名空间更改后,我遇到了类似的情况。尝试了此修复程序,但仍无法正常工作。因此,我在数据库表中手动修改了名称空间,然后它开始工作。
kosist

0

只需执行命令update-migration -Script。这将生成新的* .sql脚本,其中包括迁移中包含的所有数据库更改。在代码的最后是插入命令,如下所示:INSERT [dbo]。[__ MigrationHistory]([MigrationId],[ContextKey],[Model],[ProductVersion]),您可以简单地运行所有INSERT,并且数据库将同步


0

在一个多小时没有得到任何结果之后,我尝试了另一种方法,不使用迁移,但是进行了模式比较。

在Visual Studio中->工具-> SQL Server->新架构比较

首先,我使用EF迁移创建了一个全新的数据库。比我进行了比较,将新数据库与我要更新的数据库进行了比较。最终生成了一个迁移脚本,我可以执行模式更新。


0

就我而言(想重置并获取新的数据库),

首先我得到了错误信息: There is already an object named 'TABLENAME' in the database.

我看了一下:

"Applying migration '20111111111111_InitialCreate'.
Failed executing DbCommand (16ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE MYFIRSTTABLENAME"

我的数据库已创建,但是在迁移历史记录中没有记录。

我删除了除dbo以外的所有表。__MigrationsHistory

MigrationsHistory是空的。

dotnet ef database update -c StudyContext --verbose

(-冗长只是为了好玩)

并得到 Done.


0

我遇到了以下相同的错误。然后我将其修复如下:

  1. 检查项目中的当前数据库:
    • dotnet ef migrations list
  2. 如果最新的是您添加的,则将其删除:
    • dotnet ef migrations remove
  3. 保证此数据库的输出必须在源代码中删除:.cs / .Designer.cs文件

4.现在很好。尝试重新添加: dotnet ef migrations add [new_dbo_name]

5.最后,尝试根据迁移列表再次进行更新:

  • dotnet ef database update [First]
  • dotnet ef database update [Second]
  • ...
  • dotnet ef database update [new_dbo_name]

希望对您有帮助。^^


0

您已删除迁移文件夹,而不是尝试在程序包管理器控制台上运行“ update-database”命令?如果是这样的话

只需手动删除所有表即可,如果update-databse(cons种子数据将被删除),则比运行


0

另一种实现方法是在Up和Down方法之间注释Initial Class中的所有内容。然后在运行种子方法成功后运行update-database,因此再次运行update-database。这可能对某些朋友有所帮助。


0

我面临着同样的问题。我尝试了以下解决方案:1.从Up()中删除创建表代码,从Down()方法中删除相关代码2.在Package Manager Consol中运行update-database命令

这解决了我的问题


0

注意:之所以这样做,是因为数据库中没有任何内容。在我的情况下:1.我在Package Manager控制台中通过命令remove-migration删除了迁移 。2.通过“ SQL Server对象资源管理器”面板>在当前数据库上>右键单击>删除了数据库。3.在Package Manager控制台中写入Add -Migration,然后单击Enter。4.通过命令update-database进行最后一次更新


0

大小写相同(服务器上没有DB和MigrationHistory表)。我的步骤:

  1. 我从第一次迁移的“向上和向下”部分删除了迁移数据。
  2. 使用空迁移更新数据库(已创建MigrationHistory表)
  3. 添加您的REAL迁移并使用它来更新数据库。

0

在数据库中,查询__MigrationHistory表并复制[ContextKey]。

如下所示将其粘贴到DbMigrationsConfiguration ConextKey中

internal sealed class DbConfiguration: DbMigrationsConfiguration<DbContext>
    {
        public DbConfiguration()
        {
            AutomaticMigrationsEnabled = true;
            ContextKey = "<contextKey from above>";
        }

0

以下步骤对于同一问题对我有用:

场景:

我试图在我的现有模型中为电子邮件功能添加2个新字段。新字段是“ IsEmailVerified”和“ ActivationCode”

我遵循的步骤:

1.删​​除“迁移”(Migrations)文件夹下的旧迁移文件,这使我无法进行更新数据库2.恢复了我对模型所做的所有最近更改

3.运行以下命令:

Add-Migration -ConnectionProviderName System.Data.SqlClient -ConnectionString“数据源= DESKTOP \ SQLEXPRESS;初始目录=自定义;持久安全信息= True;用户ID = sa;密码= ****

4,从迁移文件中删除Up()和Down()方法的内容并将这些方法留空

5.运行以下命令:

Update-Database -ConnectionProviderName System.Data.SqlClient -ConnectionString“数据源= DESKTOP \ SQLEXPRESS;初始目录=自定义;持久安全性信息= True;用户ID = sa;密码= ” ***

  1. 执行完上述步骤后,模型和数据库看起来已同步。

  2. 现在,我在模型中添加了新属性

         public bool IsEmailVerified { get; set; }
         public Guid ActivationCode { get; set; }
  3. 运行以下命令:

Add-Migration -ConnectionProviderName System.Data.SqlClient -ConnectionString“数据源= DESKTOP \ SQLEXPRESS;初始目录=自定义;持久安全性信息= True;用户ID = sa;密码= ” ***

  1. 现在,迁移文件仅包含我最近的更改,如下所示:

       public override void Up()
         {
             AddColumn("dbo.UserAccounts", "IsEmailVerified", c => c.Boolean(nullable: false));
             AddColumn("dbo.UserAccounts", "ActivationCode", c => c.Guid(nullable: false));
         }        
         public override void Down()
         {
             DropColumn("dbo.UserAccounts", "ActivationCode");
             DropColumn("dbo.UserAccounts", "IsEmailVerified");
         }
  2. 运行以下命令: Update-Database -ConnectionProviderName System.Data.SqlClient -ConnectionString“数据源= DESKTOP \ SQLEXPRESS;初始目录=自定义;持久安全信息=真实;用户ID = sa;密码= ” ***

11.现在,我成功地用其他列更新了数据库。

下表是最近更改后的更新表:

更新迁移后的表


确实不建议这样做,删除productin迁移只会破坏您的环境。如果到目前为止,您为什么必须删除您的迁移?并且您的连接字符串将
不适

-5

在迁移文件中,检查公共重写void Up()方法。可能是您正在尝试创建一个已经在数据库中的新数据库对象。因此,您需要在创建db对象之前删除该对象/表。就像波纹管一样

DropTable("dbo.ABC"); 
CreateTable(
            "dbo.ABC",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    ..
                 }

现在运行您的迁移 Update-Database -TargetMigration: "2016_YourMigration"


6
如果这样做,您将丢失所有数据
Mehdiway
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.