添加迁移时出现“文件名已存在”的错误

6

我已经启用了迁移,具体如下:

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

我将我的上下文指定为一个单独的命名空间,并指定目录,因为我希望将迁移放在不同的目录中。
像这样启用迁移后,我会在预期位置(Identity\Migrations 文件夹)获得预期的配置文件(我已删除种子过程中的注释)。
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,看看是否有效。你可以检查源代码浏览器,确保没有检入导致冲突的内容。 - Steve Greene
我尝试使用不同的名称,删除文件并确保将所有内容都检入源代码控制。 - Kevin
我有一种感觉他创建了一个被排除的文件,当他想要做其他事情时,他忘记了它被排除了,然后尝试再次创建它。(但这只是我的猜测) - Kevin
2
尝试在此处使用单个反斜杠:-MigrationsDirectory Identity\Migrations,而不是-MigrationsDirectory Identity\Migrations。 - Steve Greene
就是这样!现在它正常工作了!谢谢!如果您想将其发布为答案,我会标记它为已回答。 - Kevin
1个回答

12

您的文件夹名称格式不正确,因此EF认为它是一个文件。请在这里使用单个反斜杠:-MigrationsDirectory Identity\Migrations,而不是-MigrationsDirectory Identity\\Migrations


2
当使用正斜杠而不是反斜杠时,也会出现这个问题。 - N73k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接