Вам необходимо настроить DbContextOptions, поскольку DbContext требует, чтобы DbContextOptions работал правильно. DbContextOptions содержит такую информацию, как поставщик базы данных и строка подключения.
Его можно настроить следующими способами:
1) При использовании контейнера для ввода зависимостей
Если вы используете контейнер для ввода зависимостей по умолчанию в ASP. Net Ядро, вы можете добавить приведенный ниже код в Startup.cs внутри метода ConfigureServices.
public void ConfigureServices(IServiceCollection services)
{
// ...other service registration
services.AddDbContext<EntityContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
и в настройках приложения. json, вам необходимо определить строку подключения:
{
"ConnectionStrings": {
"DefaultConnection": "Server=servername;Database=dbname;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Затем контейнер внедрения зависимостей предоставит параметры для контекста сущности, когда объект является создал.
public class EntityContext : DbContext
{
public EntityContext(DbContextOptions options) : base(options)
{
}
.....
}
Затем вы можете использовать в своем классе следующее:
public class AccountRepository
{
private readonly EntityContext context;
public AccountRepository(EntityContext entityContext)
{
this.context = entityContext;
}
public void Save()
{
context.Account.Add(acc);
context.SaveChanges();
}
}
2) Опция OnConfiguring - инициализировать DbContextOptions в самом контексте ( Когда Dependency Injection Container не используется):
public class EntityContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
options.UseSqlServer(connectionString);
}
.....
}
Затем в своем классе вы можете создать экземпляр контекста без передачи аргументов:
using (var context = new EntityContext())
{
context.Account.Add(acc);
context.SaveChanges();
}
3) Передача DbContextOptions в качестве аргумента конструктора при создании экземпляра Context (когда контейнер внедрения зависимостей не используется):
var optionsBuilder = new DbContextOptionsBuilder<EntityContext>();
optionsBuilder.UseSqlServer(connectionString);
using (var context = new EntityContext(optionsBuilder.Options))
{
context.Account.Add(acc);
context.SaveChanges();
}