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コマンドを試しました。
それはそれを解決しません私は恐れています。 StartUpProjectName引数をコマンドに追加すると、次のエラーが発生します。System.Reflection.ReflectionTypeLoadException:要求された型の1つ以上を読み込めません。 –
あなたはdll設定で適切な設定をしていますか?私は構成セクション、SQL接続などを意味します。 – Marcin
それです! SQL接続をDAL dllのapp.configに追加する必要がありました。 -StartupProjectName引数は、DALプロジェクトではなくMVC/uiプロジェクトを指す必要があることに注意してください。ご協力いただきありがとうございます。 –