7

EntityFramework4.3のCodeFirstMigrationsを使用しているときに、いくつかの未処理の例外が発生します。

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

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; }
 }

データベース初期化子:

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();
   }
}

以下を使用して、EntityFramework4.3をDALプロジェクトとMVCプロジェクトにインストールしました。

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

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

PM>有効-移行-詳細

NuGetプロジェクト'Ckms.KeyManagement.Managers'を使用します。コンテキストタイプの検索中にエラーが発生しました(例外の詳細を表示するには、-Verboseを指定してください)。System.Data.Entity.Migrations.Design.ToolingException:要求されたタイプの1つ以上をロードできません。詳細については、LoaderExceptionsプロパティを取得してください。System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)at System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
at System.Data.Entity.Migrations.MigrationsCommands.FindContextToEnable()編集移行を有効にするコンテキストを指定するために生成された構成クラス。プロジェクトCkms.KeyManagement.Managersに対してコードファーストマイグレーションが有効になっています。

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

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

   protected override void Seed(MyAppContext context)
   { }
}

これらの例外は、Add-MigrationコマンドとUpdate-Databaseコマンドに対してスローされます。

PM> Add-Migration TestEFMigrationsColumn -Verbose

NuGetプロジェクト'Ckms.KeyManagement.Managers'を使用します。スタートアッププロジェクトの使用''。System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.ArgumentException:パラメータが正しくありません。(HRESULTからの例外:0x80070057(E_INVALIDARG))---内部例外スタックトレースの終了--- System.RuntimeType.InvokeDispMethod(String name、BindingFlags invokeAttr、Object target、Object [] args、Boolean [] byrefModifiers、Int32culture 、String [] namedParameters)at System.RuntimeType.InvokeMember(String name、BindingFlags bindingFlags、バインダーバインダー、オブジェクトターゲット、Object [] ProvidedArgs、ParameterModifier []修飾子、CultureInfoカルチャー、String [] namedParams)atSystem.Management.Automation。 ComMethod.InvokeMethod(PSMethodメソッド、

データベースを更新する:

PM> Update-Database -Verbose

NuGetプロジェクト'Ckms.KeyManagement.Managers'を使用します。スタートアッププロジェクトの使用''。System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.ArgumentException:パラメータが正しくありません。(HRESULTからの例外:0x80070057(E_INVALIDARG))---内部例外スタックトレースの終了--- System.RuntimeType.InvokeDispMethod(String name、BindingFlags invokeAttr、Object target、Object [] args、Boolean [] byrefModifiers、Int32culture 、String [] namedParameters)at System.RuntimeType.InvokeMember(String name、BindingFlags bindingFlags、バインダーバインダー、オブジェクトターゲット、Object [] ProvidedArgs、ParameterModifier []修飾子、CultureInfoカルチャー、String [] namedParams)atSystem.Management.Automation。 ComMethod.InvokeMethod(PSMethodメソッド、

何か案は?エラーメッセージはあまり役に立ちません。既存のデータベースがある場合とない場合でNugetコマンドを試しました。

4

7 に答える 7

12

データアクセスに別のライブラリを使用している場合は、クエリを実行するときにその名前を指定する必要があります。

Add-Migration -StartUpProjectName "Your DAL Project" MyNewMigration

Update-Database -StartUpProjectName "Your DAL Project" -Verbose

于 2012-03-06T14:56:58.967 に答える
4
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole

最初:移行の名前

Dbset.Framework:dbContextおよびその他のクラスが存在するプロジェクト

CodeFirstConsole:プロジェクトを起動します(Web、Windows、またはコンソールアプリの場合があります)

于 2012-05-17T17:28:29.053 に答える
3

System.ArgumentExceptionの場合:パラメーターが正しくありません。(HRESULTからの例外:0x80070057(E_INVALIDARG))-projectnameとstartupprojectnameを追加しても役に立ちませんでした。

PackageManagerコンソールの[デフォルトプロジェクト]ドロップダウンを、「移行フォルダー」とその期待されるコンテンツが必要なライブラリ(私の場合)を指すように設定することが、マルチプロジェクトソリューションからこれを実行する唯一の方法でした。

于 2014-03-19T16:37:19.593 に答える
1

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

于 2014-06-28T16:18:14.760 に答える
1

接続文字列で使用されている名前を変更するだけで、この問題を解決できました。

<add name="abcd" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True" />

そして、のタグを閉じた後、connectionStringsを使用します

appSettings

のタグを開始する直前

system.web

で使用する名前connectionStringが他の接続で使用されていないことを確認してください。

于 2018-08-10T06:18:42.713 に答える
0

同じ問題が発生し、<globalization>web.configから削除することで解決しました。

于 2015-06-23T09:20:56.237 に答える
0

Webに2つの接続文字列が必要です。構成ファイル。1つ削除するだけ

于 2019-05-30T20:43:45.450 に答える