В проекте мне нужно настроить ASP.NET MVC (с .NET 4.6.1), но с помощью «нового» EF Core для доступа к базе данных.
К сожалению, в каждой документации объясняется, как настроить проект ASP.NET Core MVC.
Я просто попробовал, и когда дело доходит до создания базы данных через консоль диспетчера пакетов, я получаю сообщение об ошибке:
В DataContext нет конструктора без параметров. Либо добавьте конструктор без параметров в «DataContext», либо добавьте реализацию «IDbContextFactory» в той же сборке, что и «DataContext»,
Да, у меня нет конструктора без параметров, но и код примера microsoft
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
Я думаю, проблема в том, что я не регистрирую DataContext в Startup.cs, который у меня нет в «старом» приложении ASP.NET MVC.
Может ли кто-нибудь помочь мне с этим?
Простой пример
В Example.EF : Установите EF Core, Microksft Injection Dependency Injection. Создайте класс для поддержки DI
public static class IocConfiguration
{
public static void Configure()
{
var services = new ServiceCollection();
services.AddDbContextPool<ExampleContext>(options => {
options.UseSqlServer("_connectionstring_");
});
// Register to support the ExampleController can get DbContext.
services.AddTransient(typeof(ExampleController));
var serviceProvider = services.BuildServiceProvider();
DependencyResolver.SetResolver(new DefaultServiceResolver(serviceProvider));
}
}
public class DefaultServiceResolver : IDependencyResolver
{
private readonly IServiceProvider _serviceProvider;
public DefaultServiceResolver(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public object GetService(Type serviceType)
{
return _serviceProvider.GetService(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _serviceProvider.GetServices(serviceType);
}
}
В Example.MVC, с Application_Start в Global.asax или запуске с Owin
// Register services.
IocConfiguration.Configure();
// Example controller
public class ExampleController : Controller
{
private readonly ExampleContext _exampleContext;
public ExampleController(ExampleContext exampleContext)
{
_exampleContext = exampleContext;
}
}
Чтобы выполнить миграцию:
Add-Migration {MigrationName} -Project Example.EF -StartupProject Example.Tools
Для поддержки миграции мы должны иметь IDesignTimeDbContextFactory.