5

C#/ Visual Studio 2012 RC /.NET4.0用のEntityFramework5.0.0 RC / EF 5.x DbContext Generatorを使用して、プロジェクトで自動移行を有効にしようとしています。enable-migrationsパッケージマネージャーコンソールで実行しました:

PM> enable-migrations
No classes deriving from DbContext found in the current project.
Edit the generated Configuration class to specify the context to enable migrations for.
Code First Migrations enabled for project Test.

ご覧のとおり、DbContextから派生した型は自動的に検出されませんでしたが、生成されたコードファイルにこの型の名前を入力することで、これを簡単に解決できましたMigrations/Configuration.cs

ただし、次のステップであるPackage Manager Consoleコマンドenable-migrationsは、前のステップで追加された移行構成タイプが見つからないために失敗します。

PM> add-migration Initial
No migrations configuration type was found in the assembly 'Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

どうすればこれを解決できますか?

編集:パラメーターを使用して構成タイプの名前を指定できることがわかりました-ConfigurationTypeName

PM> add-migration -ConfigurationTypeName Test.Migrations.Configuration Initial
The type 'Configuration' is not a migrations configuration type.

これはまだ機能しませんが、少なくともベイルの理由を明らかにします。つまり、移行構成タイプではないadd-migrationと考えます。Test.Migrations.Configurationenable-によって生成されたものであるため、受け入れられない理由について誰かが手がかりを持っていますmigrationsか?以下の生成されたコードを参照してください(UserModelContainerはDbContextから派生しています)。

namespace Test.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using Test.Models;

    internal sealed class Configuration : DbMigrationsConfiguration<UserModelContainer>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(UserModelContainer 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" }
            //    );
            //
        }
    }
}
4

1 に答える 1

9

問題は、.NETFramework4.5をターゲットにしたときにEntityFramework5.0.0RCをインストールしたことであることが判明しました。Windows Azureにデプロイしたため、代わりに.NET4.0をターゲットにする必要があることがわかりました。NuGetの複雑さはわかりませんが、.NET4.5用にインストールされたEFパッケージが4.0ターゲティングプロジェクトで正しく機能しなかったようです。

EF NuGetパッケージを再インストールした後、プロジェクトを.NET 4.0でターゲットにすると、すべてが正常に機能します。

于 2012-08-07T13:22:40.380 に答える