Getting 'Contexte n'est pas constructible. Ajoutez un constructeur par défaut ou fournissez une implémentation de IDbContextFactory. "
J'obtiens cette erreur quand j'essaie d'utiliser le premier code migrations.
Mon contexte a un constructeur avec le nom de la connexion.
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; }
}
Ce nom de connexion est injecté avec ninject lorsque le projet fonctionne, j'ai aussi spécifié en tant que par défaut, comme dans le code ci-dessus mais cela n'a pas aider.
kernel.Bind<IDbContext>()
.To<VeraContext>()
.WithConstructorArgument("NameOrConnectionStringName", "VeraDB");
Lorsque j'essaie d'ajouter des migrations avec "Activer les Migrations" est jette l'erreur:
La cible contexte " VeraData.EF.L'Infrastructure.VeraContext " n'est pas
constructible. Ajouter un constructeur par défaut ou de fournir une implémentation
de IDbContextFactory.
Si je supprime le constructeur de VeraContext
que cela fonctionne, mais en crée une autre base de données avec VeraData.EF.Infrastructure.VeraContext
comme son nom l'.
Je présume que ninject
passe seulement la chaîne de connexion lors de l'exécution du projet et non pas lorsque j'utilise le premier code migrations. De toute façon je peux injecter/fournir une valeur par défaut pour le nom de la connexion lors de l'utilisation de code de la première migrations ?
source d'informationauteur LaserBeak
Vous devez vous connecter pour publier un commentaire.
Essentiellement, vous avez besoin d'un défaut ctor (c'est l'erreur) - mais il suffit de la mettre en œuvre conduirait à des problèmes.
Vous auriez à mettre en œuvre les
IDbContextFactory
pour que les résultats soient cohérents (ou la migration de code ne fonctionne pas, etc.).Ici est la base de l'usine...
Vous devez les combiner avec d'injection, d'injecter et de construire votre DbContext comme vous le souhaitez.
Si vous ne voulez pas passer le temps à la recherche dans le IDbContextFactory option, et pour obtenir des choses de travail créer un constructeur par défaut et coder en dur le nom de la chaîne de connexion lors de l'appel de la base DbContext:
SRC: http://www.appetere.com/Blogs/SteveM/April-2012/Entity-Framework-Code-First-Migrations
Pour compléter @nccsbim071 réponse, je dois ajouter une chose... cette option n'aime pas le constructeur avec paramètres par défaut... par exemple:
au lieu de cela, vous devez créer un non-paramètre (par défaut) le constructeur et le paramètre-constructeur comme à l'ancienne mode.
REMARQUE:
Entities
dans ce cas signifie la chaîne de connexion nom... Par convention, le nom du contexte est le même que la chaîne de connexion nom et depuisMyContext
n'est pas le même queEntities
il est nécessaire de le spécifier manuellement.