私はコード最初のマイグレーションを使用しようとすると、私はこのエラーを取得しています。'コンテキストを取得できません。デフォルトコンストラクタを追加するか、IDbContextFactoryの実装を提供します。」
私のコンテキストは、接続名を持つコンストラクタを持っている。
public class VeraContext : DbContext, IDbContext
{
public VeraContext(string NameOrConnectionStringName = "VeraDB")
: base(NameOrConnectionStringName)
{
}
public IDbSet<User> Users { get; set; }
public IDbSet<Product> Products { get; set; }
public IDbSet<IntCat> IntCats { get; set; }
}
この私は「有効-MIとの移行を追加しようとすると、接続名は、プロジェクトの実行時に、私はまた、上記のコードでは、デフォルトとして、それを指定しているが、これは助けにはならなかった。
kernel.Bind<IDbContext>()
.To<VeraContext>()
.WithConstructorArgument("NameOrConnectionStringName", "VeraDB");
ninjectを注射します私はVeraContext
からコンストラクタを削除した場合、それは動作します
The target context 'VeraData.EF.Infrastructure.VeraContext' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory.
が、その名前としてVeraData.EF.Infrastructure.VeraContext
で別のデータベースを作成します。grations」されると、エラーをスローします。
ninject
は、プロジェクトの実行時に接続文字列を渡すだけで、コードの最初の移行は使用しないと仮定します。とにかく、最初の移行コードを使用するときに、接続名のデフォルトを注入/提供できますか?
誰かがどこかで 'Kernel.Get'を実行しているときに、すべての問題が発生します。あなたはデフォルトのctorを追加するか、誰かがNinject経由でオブジェクトを構築するためにどのように移行のものをフックするかを伝えるのを待つ必要があります(あなたがやっていることですね!)。 –
結果が一貫するようにするには 'IDbContextFactory'を実装する必要があります(または、コードからの移行が機能しないなど)。基本的には、デフォルトのctor(エラーです)が必要ですが、実装するだけで問題につながります。 – NSGaga
'IDbContextFactory'は注入に適していません。単に設計通りに動作しません。まだそれのポイントを見ることができません... – nicodemus13