我找到了一个使用 EF6 和 Dotnet Core 的解决方案,我对此相当满意。
它不使用 EF7 的 services.AddSqlServer() 调用,而是使用 EF6 配置并在启动时调用的 Bootstrap 类中注册 DbContext。
public static class BootstrapConfig
{
public static void RegisterApplicationServices(this IServiceCollection services, IConfigurationRoot configuration)
{
// DbContext
services.AddScoped<DbContext>(x => new ApplicationContext(configuration["Data:ApplicationContext:ConnectionString"]));
}
}
这是从 WebLibrary 项目中的 Startup.cs 调用的
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.RegisterApplicationServices(Configuration);
}
WebLibrary是dot net core web应用程序(包含控制器,是启动项目)。
业务逻辑是服务层,是 Web 应用程序和数据访问项目之间的中间层。
数据访问是 dbContext 和存储库类存在的地方,用于实际执行查询。
Model 项目保存 POCO 和 Enum,不是智能对象,而是在应用程序中使用的容器。
Bootstrap 项目引用了业务逻辑和数据访问项目,以便它可以为 IOC 容器注册服务和存储库。
查看github 仓库 https://github.com/danursin/DotnetCoreEf6对于示例解决方案。我仍然遇到一个问题,具体到我的应用程序是这样的:
即使 Web 库没有对数据访问项目的引用,我仍然可以从控制器之一实例化 ApplicationContext。将这些项目分开的全部目的是让我无法直接在 Web 项目中获取数据库上下文。我不确定这是否与 Core 中的新解决方案结构有关,或者我是否包含了一些我不知道的内容。