【问题标题】:How can I get sorting, paging and filtering on a Repository without MVC如何在没有 MVC 的情况下对存储库进行排序、分页和过滤
【发布时间】:2018-11-17 22:36:20
【问题描述】:

我正在尝试为一个简单的 CRUD 项目创建后端部分。我对 asp.net 完全陌生,目前正在阅读。但是我卡住了。

我已经创建了我需要的实体(模型)

public class VehicleMakeEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Abrv { get; set; }

    public VehicleMakeEntity Make { get; set; }
}

我还创建了一个标准的 DbContext 类和存储库

class MakeRepository : IMakeRepository
{
    ProjectDbContext context;

    public MakeRepository(ProjectDbContext context)
    {
        this.context = context;
    }

    public void Delete(VehicleMakeEntity entity)
    {
        context.VehicleMake.Remove(entity);
        context.SaveChanges();
        Console.WriteLine(entity.Make.Name);
    }

    public void Insert(VehicleMakeEntity entity)
    {
        context.VehicleMake.Add(entity);
        context.SaveChanges();
    }

    public void Update(VehicleMakeEntity entity)
    {
        context.VehicleMake.Update(entity);
        context.SaveChanges();
    }

    public void Dispose()
    {
        context.Dispose();
    }
}

现在我遇到的问题是我找不到任何既不使用 MVC 又使用存储库的文档。 我需要创建一个服务类来实现基本的分页、排序和过滤,但我看到的所有 Like this 都使用 MVC,我不知道如何将它转换为我的项目。

【问题讨论】:

  • 如果您刚刚开始,我建议您做两件事:首先,完全放弃您阅读的与工作单元/存储库相关的任何内容,很少有需要这些内容的情况如果您只是在学习,请确保您不需要它。其次,抛弃 ASP.NET 和 EF,学习 ASP.NET Core 和 EF Core
  • 另一个通知:您链接的问答在两个重要方面非常错误:首先它在依赖注入时失败,其次也是最重要的,它将整个表加载到内存中然后使用几个值在分页器中。
  • 我正在执行一些任务,它们需要使用存储库。是的,我没有说清楚,我正在使用 ASP.NET Core 和 EF Core。完成基本任务后,我很可能会切换到 Razor 页面,因为我阅读了每个人都应该学习的内容。
  • 你应该更新你的标签以提及“核心”以及你的标题和正文
  • Razor Pages 适用于极其简单的网页(几乎是静态信息)或根本不使用服务器端 MVC 的 javascript 密集型应用程序。如果您打算开发大多数实际应用程序,则需要 MVC。

标签: c# asp.net-core entity-framework-core


【解决方案1】:

根据您的代码和 cmets,您有一个适用于 .NET Core Web 应用程序的设置,可以使用服务(依赖注入)实现。但是,您可以在不托管 Web 应用程序的基于控制台的应用程序上运行整个依赖注入设置。

首先,您需要添加Microsoft.AspNetCore.All 包,以便获得您可能正在使用的所有类(主要是Microsoft.Extensions.DependencyInjection)。 您现在可以像这样构建您的服务提供者:

var provider = new ServiceCollection()
                .AddDbContext<ProjectDbContext>(config => // connection here)
                .AddScoped<IMakeRepository, MakeRepository>()
                .BuildServiceProvider();

您现在可以从您的提供商那里获取您想要的任何服务。上面的代码还允许您添加在任何 .NET Core MVC 教程中找到的任何服务,因为它使用相同的类和库。假设您要获取IMakeRepository,您可以使用以下内容:

var makeRepo = provider.GetService<IMakeRepository>();

您现在可以测试 makeRepo 对象中的函数。

【讨论】:

  • Microsoft.AspNetCore,All 是一个非常庞大的元包。你只需要安装Microsoft.Extensions.DependencyInjection
  • 反对票没有任何意义。首先,它解决了问题。其次在本地运行并进行测试,我看不出几个包可能是一个大问题。第三,不,您不仅需要 DI 包。 AddDbContext 函数在 Microsoft.EntityFrameworkCore nuget 内。这只是一个例子。根据我解释他可以使用此代码执行的操作,他需要继续为每个需要安装软件包。进一步解释Microsoft.AspNetCore,All 的需要,首先回到包的目的。
猜你喜欢
  • 2018-04-15
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2023-03-20
  • 2019-02-17
  • 2019-11-08
相关资源
最近更新 更多