Ma situation est assez similaire à celle de ce lien ou du moins mon code est similaire et j'essaie de trouver un moyen d'appliquer cette même méthode dans la syntaxe .NET Core.
Transmettez la chaîne de connexion à code-premier DbContext
Mon code spécifique est le suivant:
public partial class CompanyFormsContext : DbContext
{
public CompanyFormsContext()
: base("name=CompanyFormsContext")
{
}
public CompanyFormsContext(string connName)
: base("name=" + connName)
{
}
...
}
Je reçois une erreur en disant:
Erreur CS1503 Argument 1: impossible de convertir de 'chaîne' en 'Microsoft.EntityFrameworkCore.DbContextOptions' CompanyForms..NETCoreApp, Version = v1.0
quand je vais sur la parenthèse dans base("name=CompanyFormsContext")
ou base("name=" = connName)
.
Quelle est la bonne façon d'implémenter cette fonctionnalité dans .NET Core?
Modifier:
Je voulais partager le fait que j'ai les informations suivantes pour la connexion à la base de données dans mon fichier appsettings.json: (Cependant, je n'ai pas de paramètres dans le fichier startup.cs)
"Data": {
"CompanyFormsContext": {
"ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;"
},
"CompanyFormsContextQA": {
"ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;"
}
}
et j'ai trouvé le lien suivant Ajout de DbContextOptions dans Startup.cs ne pas enregistrer le magasin de données sur le site Web et je me demande si une simple protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
suffira à réparer ma connexion ou non ?
À partir du lien:
services.AddEntityFramework(Configuration)
.AddSqlServer()
.AddDbContext<MyDbContext>(
options =>
options.UseSqlServer(Configuration.Get("Data:CompanyFormsContext:ConnectionString"))
);
Ai-je besoin de ce type de service dans mon fichier Startup.cs?
Une autre option serait d'appeler le constructeur de base qui prend un DbContextOptions:
public BooksContext(string connectionString) : base(GetOptions(connectionString))
{
}
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
En règle générale, vous souhaiterez le lire depuis config au démarrage, puis utiliser la chaîne de connexion pour configurer un service DbContext Entity Framework pour votre processus.
1) Ajoutez une ligne à votre fichier appsettings.json:
"DbConnectionString": "Server=s;Database=db;Trusted_Connection=True;",
2) Lisez la ligne dans votre classe Startup.cs (après l’appel de la méthode Startup pour construire la configuration - comme d’habitude dans la méthode ConfigureServices), comme suit:
var connection = Configuration["DbConnectionString"];
3) Si vous utilisez Entity Framework, ajoutez un service de contexte de base de données (MyDbContext est la classe de contexte générée par EF). Vous souhaitez également indiquer à l'injection de dépendance intégrée comment instancier votre contexte de base de données:
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connection));
services.AddScoped<IMyDbContext, MyDbContext>();
Où IMyDbContext est (à son plus simple) une interface que vous avez extraite de votre MyDbContext
4) Maintenant, vous pouvez définir votre contrôleur pour qu'il prenne un MyDbContext et la DI se chargera de le construire et de le transmettre lorsque le contrôleur est appelé:
public MyController(IMyDbContext context)
{
_context = context // store for later use
}
Meilleure pratique de l'OMI:
ajouter à votre configuration.json:
"ConnectionStrings": {
"BooksContext": "Server=MyServer;Database=MyDb;Trusted_Connection=True;"
}
et à initialiser section:
services.AddDbContext<BooksContext>(options => options.UseSqlServer(configuration.GetConnectionString(nameof(BooksContext))));
Startup.cs pour la connexion statique
services.AddScoped<MyContext>(_ => new MyContext(Configuration.GetConnectionString("myDB")));
Table1Repository.cs pour la connexion dynamique
using (var _context = new MyContext(@"server=....){
context.Table1....
}
MonContext.cs
public MyContext(string connectionString) : base(GetOptions(connectionString))
{
}
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}