EF Core與ASP MVC .NET 4.6

asp.net-mvc-5 entity-framework-core

在一個項目中,我需要設置一個ASP.NET MVC(使用.NET 4.6.1),但使用“新”EF Core來訪問數據庫。

不幸的是,每個文檔都只解釋瞭如何設置ASP.NET Core MVC項目。

我只是試一試,當涉及通過軟件包管理器控制台創建數據庫時,我收到錯誤消息:

在'DataContext'上找不到無參數構造函數。要么將無參數構造函數添加到'DataContext',要么在與'DataContext'相同的程序集中添加'IDbContextFactory'的實現

是的,我沒有無參數構造函數,但微軟的示例代碼也沒有

public DataContext(DbContextOptions<DataContext> options) : base(options) { }

我想問題是,我沒有在Startup.cs中註冊DataContext,這是我在“舊的”ASP.NET MVC應用程序中沒有的。

任何人都可以幫我這個嗎?

熱門答案

一個簡單的例子

  • Example.EF (使用EF Core和Microsoft依賴注入的.NET標準項目)。
  • Example.Tools - 參考Example.EF (僅為開發人員運行遷移的.NET Core CommandLine項目)。
  • Example.MVC - 參考例 .EF(MVC5)。

Example.EF中 :安裝EF Core,Microsft依賴注入。創建一個類來支持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中或Startup with 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來支持運行遷移。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow