【问题标题】:Enabling migrations for project where context in different project在不同项目中的上下文中启用项目迁移
【发布时间】:2016-02-21 16:16:57
【问题描述】:

我在跑步:

enable-migrations -ContextProjectName CC.Data -StartUpProjectName CC.Web -ContextTypeName CC.Data.CcDataContext -ProjectName CC.Plugin.MyPlugin -Force -Verbose

这会在CC.Plugin.MyPlugin.Migrations 中创建名为Configuration.cs 的配置文件,但是当它完成时会抛出此错误:

迁移配置类型 'CC.Plugin.MyPlugin.Migrations.Configuration' 在 程序集'CC.Plugin.MyPlugin'。

我不明白它怎么找不到它,因为它只是添加到那里。 congif 文件如下所示:

namespace CC.Plugin.MyPlugin.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<CC.Data.CcDataContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(CC.Data.CcDataContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }
    }
}

看起来不错。

有什么想法吗?

编辑:这似乎是在同一解决方案中链接来自项目的引用的问题。一旦我从解决方案链接中删除了这些引用,而是通过浏览完成并指向 DLL,它就开始工作了。

【问题讨论】:

  • 这很奇怪...您是否尝试过清理和重建解决方案?在包管理器控制台中哪个项目被选为“默认项目”?
  • 我已经清理和重建了很多次,尝试将internal sealed 更改为public(你永远不知道:))但没有运气。默认项目设置为我的CC.Plugin.MyPlugin 项目。
  • 我一直在玩这个,看起来在直接处理项目时(不是作为解决方案下其他项目组的一部分)我已经让它工作了。我觉得这很奇怪,但我会在知道更多信息后报告。

标签: c# entity-framework ef-code-first entity-framework-6


【解决方案1】:

编辑这并没有解决问题。虽然它让我添加了初始迁移,但当我尝试运行 update-database 时,它​​似乎又被破坏了(即使我确实让它工作了)。

经过多次反复试验,我发现导致此问题的原因是需要在我的解决方案中的所有项目中更新我的 ASP.NET MVC 引用。一旦我这样做了,它就像一个魅力。

除此之外,迁移一些其他插件也会导致问题,通过反复试验,我似乎需要通过 Nuget 添加 Webgrease 引用并将 ANTLR 更新到最新版本。

另一个问题:我的插件是主要解决方案的一部分。为了得到一些更新,我不得不自己打开它。保存解决方案文件。启用 Nuget 自动还原。清洁构建,尝试并启用迁移,让它失败。撤消我在源代码管理中的所有更改。再次通过主解决方案加载它,然后添加迁移,此时它抱怨找不到引用。一旦我添加了这些(或在某些情况下删除并重新添加),它就起作用了。很奇怪,但可能对其他人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2014-09-07
    相关资源
    最近更新 更多