有什么方法可以在.net核心的OnModelCreating中的表中使用order by子句

问题描述

我想在下面的代码中使用 order by 子句。模型和视图中有 StartDatetime 字段。所以 order by 应该在代码中使用 startDatetime desc 。 谁能指导我如何做到这一点?

  protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            {
                var builder = modelBuilder.Entity<TestBookingsView>().ToTable("vw_Testbooking");
 
                SetKey(builder);
            }

            modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
        }

解决方法

重写 OnModelCreating 方法以进一步配置根据约定从派生上下文的 DbSet 属性中公开的实体类型发现的模型。

在 OnModelCreating 方法中,我们可以使用 Fluent API 配置模型、实体和属性配置。示例代码如下:

public class SchoolDBContext: DbContext 
{
    public DbSet<Student> Students { get; set; }
        
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //Write Fluent API configurations here

        //Property Configurations
        modelBuilder.Entity<Student>()
                .Property(s => s.StudentId)
                .HasColumnName("Id")
                .HasDefaultValue(0)
                .IsRequired();
    }
}

有关使用 Fluent API 的更多详细信息,请查看以下文章:

Fluent API in Entity Framework Core

Fluent API Configuration

我想在下面的代码中使用 order by 子句。模型和 视图中有 StartDatetime 字段。所以 order by 应该使用 代码中的 startDatetime 说明。

根据您的描述,我假设您可能想使用 Fluent API 设置默认顺序。在 EF 6 中,使用 Fluent API 时有一个 HasColumnOrder() method,但不幸的是,在 EF core 中,似乎不支持此方法。

因此,我建议您可以在 Query 语句中使用 OrderByOrderByDescending 方法,而不是在 OnModelCreating 方法中。您可以参考本教程:Tutorial: Add sorting,filtering,and paging - ASP.NET MVC with EF Core