.net - 添加迁移给出文件名已经存在

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

我已经启用了迁移:

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 来控制这个项目的源代码。

最佳答案

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

关于.net - 添加迁移给出文件名已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30781271/

相关文章:

c# - RESTful 部分请求和部分序列化

.net - 线程与线程池

entity-framework - 如何使用流畅的配置在 Entity Framework 6.2 中创建索引

.net - 如何解决 "%1 is not a valid Win32 application"?

c# - 如何为表单上的所有绑定(bind)调用 UpdateSource?

c# - 深入理解MVC .net中的延迟加载和处理错误

c# - 系统无效操作异常: The specified cast from a materialized 'System.Int32' type to a nullable 'Country' type is not valid

c# - 使用 Entity Framework 4.0 检索数据的最佳实践

c# - ef core - 如何将类映射的多个变体映射到同一个表

.net - Entity Framework 6 with SQLite 3 Code First - 不会创建表