【问题标题】:Adding a migrations gives filename already exists添加迁移给文件名已经存在
【发布时间】:2015-06-11 12:48:34
【问题描述】:

我已启用迁移:

enable-Migrations -ProjectName ProjectOne -ContextTypeName MyIdentity.Config.MyIdentityContext -MigrationsDirectory Identity\\Migrations

我指定了我的上下文,因为它位于一个单独的命名空间中,我指定了目录,因为我想在不同的目录中进行迁移。

像这样启用迁移后,我在预期位置(Identity\Migrations 文件夹)中获得预期的配置文件(我在种子过程中删除了 cmets)

Friend NotInheritable Class Configuration
    Inherits DbMigrationsConfiguration(Of MyIdentityDbContext)

    Public Sub New()
        AutomaticMigrationsEnabled = False
        MigrationsDirectory = "Identity\\Migrations"
    End Sub

    Protected Overrides Sub Seed(context As MyIdentityDbContext)

    End Sub

End Class

在此之后我创建一个迁移:

add-migration Initial

然后我收到一条错误消息,指出该文件已存在:

Scaffolding migration 'Initial'.
System.Runtime.InteropServices.COMException (0x80040400): Unable to add '201506111233565_Initial.vb'. A file with that name already exists.

Server stack trace: 
at EnvDTE.ProjectItems.AddFromFileCopy(String FilePath)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at EnvDTE.ProjectItems.AddFromFileCopy(String FilePath)
at System.Data.Entity.Migrations.Extensions.ProjectExtensions.AddFile(Project project, String path)
at System.Data.Entity.Migrations.Extensions.ProjectExtensions.AddFile(Project project, String path, String contents)
at System.Data.Entity.Migrations.Utilities.MigrationWriter.Write(ScaffoldedMigration scaffoldedMigration, Boolean rescaffolding, Boolean force, String name)
at System.Data.Entity.Migrations.AddMigrationCommand.WriteMigration(String name, Boolean force, ScaffoldedMigration scaffoldedMigration, Boolean rescaffolding)
at System.Data.Entity.Migrations.AddMigrationCommand.Execute(String name, Boolean force, Boolean ignoreChanges)
at System.Data.Entity.Migrations.AddMigrationCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Unable to add '201506111233565_Initial.vb'. A file with that name already exists.

当我查看解决方案资源管理器时(刷新后),文件在那里,但从项目中排除。

当我删除 MigrationsDirectory = "Identity\Migrations" 时,它工作正常(但迁移文件是在 \Migrations 中创建的)

我认为这无关紧要,但可以肯定的是:我还在使用 Team explorer 2013 来控制这个项目的源代码。

【问题讨论】:

  • 您应该能够删除迁移文件并重复。尝试使用不同的名称,如 Init2,看看是否有效。您可以检查源资源管理器以确保没有签入导致冲突的内容。
  • 我尝试使用不同的名称,删除文件并确保所有内容都已签入源代码管理。
  • 我感觉他将文件创建为排除文件,当他想用它做其他事情时,他忘记了它被排除并尝试再次创建它。 (但这只是一种预感)
  • 尝试在此处使用单个反斜杠:-MigrationsDirectory Identity\Migrations 而不是 -MigrationsDirectory Identity\\Migrations
  • 就是这样!它现在工作正常!谢谢!如果您想将其发布为答案,我会将其标记为已回答

标签: .net entity-framework ef-code-first code-first entity-framework-migrations


【解决方案1】:

您的文件夹名称格式错误,因此 EF 认为它是一个文件。尝试在此处使用单个反斜杠:-MigrationsDirectory Identity\Migrations 而不是 -MigrationsDirectory Identity\\Migrations

【讨论】:

  • 使用正斜杠而不是反斜杠时也会出现此问题。
猜你喜欢
  • 2020-03-03
  • 2017-07-09
  • 2016-05-29
  • 2012-03-11
  • 2018-04-07
  • 1970-01-01
  • 2019-11-17
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多