Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从ASP.NET core 3.1中的EntityFrameworkCore 3中删除依赖项_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 如何从ASP.NET core 3.1中的EntityFrameworkCore 3中删除依赖项

C# 如何从ASP.NET core 3.1中的EntityFrameworkCore 3中删除依赖项,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我的EF核心数据库访问层和ASP.NET核心应用程序在不同的项目中。我正在尝试将数据库访问层连接到Web应用程序,并附带代码 public void ConfigureServices(IServiceCollection services) { services.AddDbContext<DatabaseContext>(options => options.UseSqlServer(Configuration.GetConnectionString(

我的EF核心数据库访问层和ASP.NET核心应用程序在不同的项目中。我正在尝试将数据库访问层连接到Web应用程序,并附带代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<DatabaseContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("Connection")));

    services.AddScoped<IMyDbContext, DatabaseContext>();
    services.AddScoped<IUserService, UserService>();
    services.AddScoped<IPlanService, PlanService>();

    services.AddControllersWithViews();
}
ASP.NET web项目中的DI连接,不依赖于EF

  UnityContainer.AddExtension(new SharedUnityRegistry(lifetimeManager => new HierarchicalLifetimeManager()));

您可以为此使用扩展方法,并将其放在数据库项目中。但是您仍然需要有对数据库项目的引用

数据库项目:

public static class Extensions
{
    public static IServiceCollection UseMyDatabase(this IServiceCollection services, string connectionString)
    {
        services.AddDbContext<DatabaseContext>(options => options.UseSqlServer(connectionString));
        return services;
    }
}

您可以为此使用扩展方法,并将其放在数据库项目中。但是您仍然需要有对数据库项目的引用

数据库项目:

public static class Extensions
{
    public static IServiceCollection UseMyDatabase(this IServiceCollection services, string connectionString)
    {
        services.AddDbContext<DatabaseContext>(options => options.UseSqlServer(connectionString));
        return services;
    }
}
在年中,我解决了这个问题,如下所示:

创建在应用程序启动期间调用的接口。这允许附属程序集注册其服务,而无需在启动时自行决定。 实现不知道底层数据库的层 为受支持的数据库创建带有迁移的专用数据上下文。在我的例子中,用于单元测试。要使用的数据库在应用程序设置中设置,每个数据库提供商决定是否需要自己注册;例如 请注意,只有命名空间Sppd.TeamTuner.Infrastructure.DataAccess中的项目引用EF core。作为记录:我无法使用asp.net标识,因为这样。

在中,我解决了以下问题:

创建在应用程序启动期间调用的接口。这允许附属程序集注册其服务,而无需在启动时自行决定。 实现不知道底层数据库的层 为受支持的数据库创建带有迁移的专用数据上下文。在我的例子中,用于单元测试。要使用的数据库在应用程序设置中设置,每个数据库提供商决定是否需要自己注册;例如
请注意,只有命名空间Sppd.TeamTuner.Infrastructure.DataAccess中的项目引用EF core。作为记录:我无法使用asp.net标识,因为这一点。

问题是自相矛盾的:DbContext由EF Core提供。无法删除定义要使用的类的库。您是否正在询问如何从Startup.cs中删除库的原始配置代码?添加自己的AddMyLibrary,在程序集中使用MyLibrary扩展方法并从Startup.csi调用它们。如果要在所有程序集中注册所有DbContext,可以使用与Unity类似的代码执行此操作-获取所有程序集,然后获取从DbContext继承的程序集中的所有类型并注册它们。只是不要使用服务。AddScoped;:首先,DbContext是所有上下文的基类,该行表示只有一个DbContext实现。其次,AddDbContext已经将上下文注册为scoped@PanagiotisKanavos我已经更新了我的问题,使其不依赖于DbContext,并引入了这样的继承DatabaseContext:DbContext,IMyDbContext。因此,问题似乎是开放的,如何将注入移出web项目,是否可以使用内置DI?至于动态上下文注册,AppDomain.CurrentDomain.GetAssemblys.SelectManya=>a.GetTypes.Wheretype=>typeofMicrosoft.EntityFrameworkCore.DbContext.IsAssignableFromtype将获得整个应用程序中的所有DbContext。Assembly.GetExecutionGassembly。。。。。将仅获取当前程序集的DBContext。你可以在它们上面循环并注册它们。@PanagiotisKanavos我怎么没有想到扩展方法:只是试图用复杂的方式解决简单的问题。非常感谢。问题是自相矛盾的:DbContext是由efcore提供的。无法删除定义要使用的类的库。您是否正在询问如何从Startup.cs中删除库的原始配置代码?添加自己的AddMyLibrary,在程序集中使用MyLibrary扩展方法并从Startup.csi调用它们。如果要在所有程序集中注册所有DbContext,可以使用与Unity类似的代码执行此操作-获取所有程序集,然后获取从DbContext继承的程序集中的所有类型并注册它们。只是不要使用服务。AddScoped;:首先,DbContext是所有上下文的基类,该行表示只有一个DbContext实现。其次,AddDbContext已经将上下文注册为scoped@PanagiotisKanavos我已经更新了我的问题,使其不依赖于DbContext,并引入了这样的继承DatabaseContext:DbContext,IMyDbContext。因此,问题似乎是开放的,如何将注入移出web项目,是否可以使用内置DI?至于动态上下文注册,AppDomain.CurrentDomain.GetAssemblys.SelectManya=>a.GetTypes.Wheretype=>typeofMicrosoft.EntityFrameworkCore.DbContext.IsAssignableFromtype将获得整个应用程序中的所有DbContext。Assembly.GetExecutionGassembly。。。。。将仅获取当前程序集的DBContext。你可以在它们上面循环并注册它们。@PanagiotisKanavos我怎么没有 I don’我没有关于扩展方法的想法:只是试图用复杂的方式解决简单的问题。非常感谢。
services.UseMyDatabase(Configuration.GetConnectionString("Connection"));