1

コンテキストをクリーンでシンプルに保つために、抽象クラスに多くのロジックを配置し、コンテキストを継承させました。

ここでこのアプローチを見ましたが、クラスが直接継承しなくなったため、DBContext移行を作成できません。

私の抽象クラスは

public abstract class MyContext : DbContext
{

    public MyContext(string connString)
        : base(connString)
    {
    }
   public override int SaveChanges()
    {
        // custom code here
    }
}

PMコンソールでadd-migrationと入力して移行を作成しようとすると、継承元のクラスDBContextが見つからないことを示すエラーが表示されます。

PMコンソールは

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

1 に答える 1

1

EFリポジトリでこのエラーメッセージ(「移行構成タイプが見つかりませんでした」)を検索すると、次のリソースがEntityFramework / Properties/Resources.csファイルにあります。

/// <summary>
/// A string like "No migrations configuration type was found in the assembly '{0}'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration)."
/// </summary>
internal static string AssemblyMigrator_NoConfiguration(object p0)
{
    return EntityRes.GetString(EntityRes.AssemblyMigrator_NoConfiguration, p0);
}

次のステップはAssemblyMigrator_NoConfiguration使用法の検索であり、EntityFramework / Migrations / Design/ToolingFacade.csにあるオカレンスが1つだけ見つかります。

private DbMigrationsConfiguration FindConfiguration()
{
    var configurationType = FindType<DbMigrationsConfiguration>(
        ConfigurationTypeName,
        types => types
                     .Where(
                         t => t.GetConstructor(Type.EmptyTypes) != null
                              && !t.IsAbstract
                              && !t.IsGenericType)
                     .ToList(),
        Error.AssemblyMigrator_NoConfiguration,
        (assembly, types) => Error.AssemblyMigrator_MultipleConfigurations(assembly),
        Error.AssemblyMigrator_NoConfigurationWithName,
        Error.AssemblyMigrator_MultipleConfigurationsWithName);

    return configurationType.CreateInstance<DbMigrationsConfiguration>(
        Strings.CreateInstance_BadMigrationsConfigurationType,
        s => new MigrationsException(s));
}

これで、エラーを追跡して修正する方が簡単になると思います。

ソースコードでテストしましたが、メッセージは無関係でした。relの原因はapp.configのターゲットフレームワークタグであることがわかりました。

正解の同様の質問は次 のとおりです。 「Enable-Migrations」は、.NET4.5およびEF5にアップグレードした後に失敗します

興味深いことに、それぞれContextクラス名とConfiguratinクラス名を正確に指すEnable-MirationsとAdd-Migrationを実行すると、正常に機能します。しかし、言及された解決策は正しい解決策であり、また簡単です:-)

于 2013-01-27T07:54:31.943 に答える