My situation is quite similar to this link or at least my code is similar and I am trying to find a way to apply this same method in .NET Core syntax.
Pass connection string to code-first DbContext
My specific code is as follows:
public partial class CompanyFormsContext : DbContext { public CompanyFormsContext() : base("name=CompanyFormsContext") { } public CompanyFormsContext(string connName) : base("name=" + connName) { } ... }
I get an error saying:
Error CS1503 Argument 1: cannot convert from 'string' to 'Microsoft.EntityFrameworkCore.DbContextOptions' CompanyForms..NETCoreApp,Version=v1.0
when I go over the parenthesis in base("name=CompanyFormsContext")
or base("name=" = connName)
.
What is the correct way of implementing this functionality in .NET Core?
Edit:
I wanted to share that I have the following information for database connection in my appsettings.json file: (However, I do not have settings in the startup.cs)
"Data": { "CompanyFormsContext": { "ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;" }, "CompanyFormsContextQA": { "ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;" } }
and I have found the following link Adding DbContextOptions in Startup.cs not registering data store in the website and I am wondering if a simple protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
will be enough to fix my connection or not?
From the link:
services.AddEntityFramework(Configuration) .AddSqlServer() .AddDbContext<MyDbContext>( options => options.UseSqlServer(Configuration.Get("Data:CompanyFormsContext:ConnectionString")) );
Do I need this kind of a service in my Startup.cs?
ASP.NET Core For instance, you can use the Secret Manager tool to store your database password and then, in scaffolding, use a connection string that simply consists of Name=<database-alias> . Or the following example shows the connection string stored in appsettings. json .
A DbContext instance represents a session with the database and can be used to query and save instances of your entities. DbContext is a combination of the Unit Of Work and Repository patterns. Entity Framework Core does not support multiple parallel operations being run on the same DbContext instance.
The AddDbContext extension method registers DbContext types with a scoped lifetime by default.
Another option would be to call the base constructor that takes a DbContextOptions:
public BooksContext(string connectionString) : base(GetOptions(connectionString)) { } private static DbContextOptions GetOptions(string connectionString) { return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options; }
Generally you are going to want to read it from config at start-up, and then use the connection string to configure an Entity Framework DbContext service for your process.
1) Add a line to your appsettings.json:
"DbConnectionString": "Server=s;Database=db;Trusted_Connection=True;",
2) Read the line in you Startup.cs class (after the Startup method is called to build the Configuration - so usually in the ConfigureServices method) like this:
var connection = Configuration["DbConnectionString"];
3) If using Entity Framework add a database context service (MyDbContext is the context class generated by EF). You also want to tell the built-in dependency injection how to instantiate your database context:
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connection)); services.AddScoped<IMyDbContext, MyDbContext>();
Where IMyDbContext is (at it's simplist) just an interface you've extracted from your MyDbContext
4) Now you can define your controller to take a MyDbContext and the DI will take care of building it and passing it in when the controller is invoked:
public MyController(IMyDbContext context) { _context = context // store for later use }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With