Remplacement du constructeur DbContext généré par un code
Je suis sûr que j'ai fait avant, mais je ne peux pas comprendre comment maintenant! Mon scénario:
//This is generated from EDMX
public partial class HOLDbEntities : DbContext
{
public HOLDbEntities()
: base("name=HOLDbEntities")
{
}
}
Maintenant, je veux que cette chaîne de connexion pour être facilement modifiable (je tiens à mettre en Œuvre dans le HOLDbEntities), donc j'ai besoin de remplacer ce constructeur.
J'ai essayé:
public partial class HOLDbEntities
{
private const string _contextName = "HOLDbEntities";
public static string ContextName { get { return _contextName; } }
public HOLDbEntities()
: base(ContextName)
{
}
}
Mais cela renvoie une erreur:
HOLDbEntities définit déjà un membre appelé "HOLDbEntities", avec les mêmes types de paramètres.
Je peux comprendre le pourquoi de cette erreur, mais comment pourrais-je arrêter le constructeur étant auto-généré, en premier lieu, afin de faire ce que je suis en train de réaliser?
source d'informationauteur Chris Dixon
Vous devez vous connecter pour publier un commentaire.
Du mieux que je peux suggérer, c'est une méthode de fabrique:
et l'utilisation
HOLDbEntities.Create()
plutôt quenew HOLDbEntities()
.I-voté le précédent accepté de répondre parce que c'est un assez élégant moyen de le faire. Cependant, une autre approche consisterait à modifier le modèle T4 qui génère la Classe dbContext.
Lors de l'utilisation de l'EF DB vous que vous avez un .fichier edmx et sous que vous avez une [Entité].Contexte.tt fichier. Aller dans ce fichier et de supprimer (ou modifier) le code suivant:
maintenant votre classe de contexte va générer sans un constructeur, donc vous devriez être en mesure d'aller en créer un dans une classe étendue.
j'ai changé le contexte.tt comme suit:
donc je peux déclarer une OnModelConstructed méthode dans une classe partielle du contexte.