2012-03-06 13 views
6

Entity Framework 4.3のコードファーストマイグレーションを使用しているときにいくつかの未処理の例外が発生しています。Entity Frameworkコードの最初の移行の例外

データベースコンテキスト:

public class MyAppContext : DbContext 
{ 
    public DbSet<Branch> Branches { get; set; } 

    public MyAppContext() 
    { } 
} 

エンティティ:

public class Branch : IEntity<Guid> 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool Active { get; set; } 
} 

データベース初期化子:私は私のDALのプロジェクトと使用してMVCプロジェクトにEntity Frameworkの4.3をインストールし

public class MyAppInitializer : CreateDatabaseIfNotExists<MyAppContext> 
{ 
    protected override void Seed(MyAppContext context) 
    { 
     context.Branches.Add(new Branch() { Id = branchId, Name = "Acme", Description = "Acme", Active = true }); 
     context.SaveChanges(); 
    } 
} 

インストール・パッケージEntityFramework

を私はスタートアッププロジェクトとしてMVCプロジェクトを設定し、データベースコンテキストと初期化子とDALのプロジェクトには、次のコマンドを実行しています

PM>有効-移行-Verbose

NuGetプロジェクト 'Ckms.KeyManagement.Managers'を使用します。 コンテキストタイプを検索中にエラーが発生しました(例外の詳細を表示するには-Verboseを指定してください)。 System.Data.Entity.Migrations.Design.ToolingException:1つまたは複数の要求された型を読み込めません。詳細については、LoaderExceptionsプロパティを取得してください。 System.Data.Entity.Migrations.MigrationsCommandsで System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
で System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner ランナー)で.FindContextToEnable() 生成されたConfigurationクラスを編集して、 の移行を有効にするコンテキストを指定します。 プロジェクトCkms.KeyManagement.Managersのコードの最初の移行が有効になっています。

DbMigrationsConfiguration子クラスがDALプロジェクトに追加されます。私は手動でDbContextの種類を追加し、自動移行を有効にする場合:

PM>アドオンの移行TestEFMigrationsColumn -Verbose:

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

    protected override void Seed(MyAppContext context) 
    { } 
} 

をこれらの例外は、移行を追加して更新し、データベースのコマンドのためにスローされます

NuGetプロジェクト 'Ckms.KeyManagement.Managers'を使用しています。 StartUpプロジェクトを使用しています。 System.Reflection.TargetInvocationException:例外が呼び出しのターゲットによって にスローされました。 ---> System.ArgumentException: パラメータが間違っています。 (HRESULTからの例外:0x80070057 (E_INVALIDARG))---内部例外スタックトレースの末尾--- System.RuntimeType.InvokeDispMethod(String name、BindingFlags invokeAttr、Object target、Object [] args、Boolean [] byrefModifiers 、 Int32 culture、String [] namedParameters)、 にあります。System.RuntimeType。InvokeMember(文字列名、のBindingFlags のBindingFlags、バインダーバインダー、オブジェクトのターゲット、[] providedArgs、 ParameterModifier []修飾子、CultureInfoカルチャ、文字列[] namedParams物体) System.Management.Automation.ComMethod.InvokeMethod(PSMethod方法での Object [] arguments) 呼び出しのターゲットによって例外がスローされました。

アップデート - データベース:

PM>アップデート - データベース

-Verbose NuGetプロジェクト 'Ckms.KeyManagement.Managers' を使用。 StartUpプロジェクトを使用しています。 System.Reflection.TargetInvocationException:例外が呼び出しのターゲットによって にスローされました。 ---> System.ArgumentException: パラメータが間違っています。 (HRESULTからの例外:0x80070057 (E_INVALIDARG))---内部例外スタックトレースの末尾--- System.RuntimeType.InvokeDispMethod(String name、BindingFlags invokeAttr、Object target、Object [] args、Boolean [] byrefModifiers 、 System.RuntimeType.InvokeMember(文字列名のBindingFlags のBindingFlags、バインダーバインダー、オブジェクト対象における のInt32培養、文字列[] namedParameters)は、[] providedArgs、 ParameterModifier []修飾子、CultureInfoカルチャ、文字列[] namedParamsオブジェクト)at System.Management.Automation.ComMethod.InvokeMethod(PSMethodメソッド、 Object [] arguments) 呼び出しのターゲットによって例外がスローされました。

エラーメッセージは本当に役に立ちません。私は既存のデータベースの有無にかかわらずNugetコマンドを試しました。

答えて

12

あなたは、クエリを実行するとき、それは名前を提供する必要があるデータ・アクセスのための別のライブラリを使用している場合:

追加-移行-StartUpProjectNameを「あなたのDALのプロジェクト」MyNewMigration

の更新とデータベースの-StartUpProjectNameを

+1

それはそれを解決しません私は恐れています。 StartUpProjectName引数をコマンドに追加すると、次のエラーが発生します。System.Reflection.ReflectionTypeLoadException:要求された型の1つ以上を読み込めません。 –

+1

あなたはdll設定で適切な設定をしていますか?私は構成セクション、SQL接続などを意味します。 – Marcin

+2

それです! SQL接続をDAL dllのapp.configに追加する必要がありました。 -StartupProjectName引数は、DALプロジェクトではなくMVC/uiプロジェクトを指す必要があることに注意してください。ご協力いただきありがとうございます。 –

4
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole 

まず-Verbose "あなたのDALのプロジェクト":移行

の名前

Dbset.Framework:プロジェクトdbContextと他のクラスが

CodeFirstConsole:System.ArgumentExceptionのためのプロジェクト(ウェブ、窓またはコンソールアプリかもしれない)

3

起動します。パラメータが正しくありません。 (HRESULTからの例外:0x80070057(E_INVALIDARG))-projectnameとstartupprojectnameを追加しても効果がありませんでした。

PackageManagerコンソールの「デフォルトプロジェクト」を設定する「マイグレーションフォルダ」とその期待される内容をマルチプルプロジェクトソリューションから取得する唯一の方法は、ライブラリを指し示すドロップダウン(私の場合)です。

+0

Paul、これを少し拡張できますか?また、-projectnameとstartupprojectnameを追加して動作させることもできません。 「デフォルトプロジェクト」はどこで設定しますか(VS2013を使用していると私はそれを見ませんでした)。 –

1

私も同じ問題がありました。設定ファイルに何か問題があると、このエラーが発生することがわかりました。私はweb.configに重複したタグを付けて、これらの問題を解決しました。

0

同じ問題が発生した場合は、web.configから<globalization>を削除して解決します。

関連する問題