C# .Net核心实体框架抽象

C# .Net核心实体框架抽象,c#,entity-framework,interface,repository-pattern,dependency-management,C#,Entity Framework,Interface,Repository Pattern,Dependency Management,我有一个.Net核心类库项目,它有一个使用实体框架的上下文文件。上下文文件如下所示 public partial class Qcrr : DbContext { public virtual DbSet<AirWorthyNess> AirWorthyNess { get; set; } public virtual DbSet<AwLog> AwLog { get; set; } public virtual DbSet<Awserial

我有一个.Net核心类库项目,它有一个使用
实体框架
的上下文文件。上下文文件如下所示

public partial class Qcrr : DbContext
{
    public virtual DbSet<AirWorthyNess> AirWorthyNess { get; set; }
    public virtual DbSet<AwLog> AwLog { get; set; }
    public virtual DbSet<AwserialNumbers> AwserialNumbers { get; set; }
    public virtual DbSet<EmployeeInformation> EmployeeInformation { get; set; }
    public virtual DbSet<Password256> Password256 { get; set; }
    public virtual DbSet<Persistant> Persistant { get; set; }
    public virtual DbSet<TblApplicationRights> TblApplicationRights { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer(@"my connection string");
        }
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        /* my tables
        .
        .
        .

        */
    }
}
公共部分类Qcrr:DbContext
{
公共虚拟数据库集

它告诉我再次引用实体框架

所以我的问题是,抽象我的dbcontext(位于类库中)的最佳实践方法是什么


我是否需要实现DbContext功能(scuh作为Add、AddRange、Delete、IQueryable实现(Select、Where、First…)?

实体框架已经是DB的一个很好的抽象。 如果您添加了另一个层,您总是会被迫向抽象添加越来越多的功能

一个很好的例子是EF的AsNoTracking函数。这对性能有好处,但在不重新实现整个EF逻辑的情况下将其实现添加到抽象中是一件大事。另一个例子是空间数据类型、原始SQL查询和业务逻辑可能需要的更有趣的函数,但您不能使用它们,因为我们的抽象。所以不要再添加另一层


在我看来,解决方案是使用存储库模式。

实体框架已经是数据库的良好抽象。 如果您添加了另一个层,您总是会被迫向抽象添加越来越多的功能

一个很好的例子是EF的AsNoTracking函数。这对性能有好处,但在不重新实现整个EF逻辑的情况下将其实现添加到抽象中是一件大事。另一个例子是空间数据类型、原始SQL查询和业务逻辑可能需要的更有趣的函数,但您不能使用它们,因为我们的抽象。所以不要再添加另一层


在我看来,解决方案是使用存储库模式。

它也是.NET Core控制台应用程序吗?@ceferrari是的,很抱歉我忘记在那里添加Core。然后您需要添加“使用Microsoft.EntityFrameworkCore;”。您不需要在控制台应用程序tho中安装EF Core软件包,因为它引用了已有的类库,并且.NET Core获得了@ceferari。如何在不安装的情况下添加using语句?如果将类库添加为控制台应用程序的依赖项,则可以实现这一点。它也是.NET Core控制台应用程序吗?@ce法拉利是的,很抱歉我忘了在那里添加Core。然后您需要添加“使用Microsoft.EntityFrameworkCore;”。您不需要在控制台应用程序tho中安装EF Core软件包,因为它引用了已有的类库,并且.NET Core获得了@ceferari。如何在不安装的情况下添加using语句?如果将类库添加为控制台应用程序的依赖项,则可以实现这一点,而无需创建大量应用程序keeps需要我一次又一次地安装EF,我想在包含所有数据库集的类库中使用EF。然后通过引用我的dll,我将能够对我的表有一个很好的IntelliSense视图,并使用EF本身的魔力。这至少是我的计划。而不是创建大量需要为了一次又一次地安装EF,我想在包含所有数据库集的类库中使用EF。然后通过引用我的dll,我将能够对我的表有一个很好的IntelliSense视图,并使用EF本身的魔力。这至少是我的计划。