我正在寻找使用实体框架在数据库中执行查询的替代方案,我想知道是否可以使用 EF 直接从应用程序触发查询,而不是使用触发 DbSet 的传统方法,是否有任何方法方式?
经过一番研究,我找到了一种使用实体框架进行查询的方法,这是一个例子:
例如,假设您要执行此查询:
SELECT COUNT(*) AS [Total] FROM [Users]
您需要一个与此查询结果匹配的类,对于本例,它可能是此类:
public class UserCount
{
public int Total { get; set; }
}
创建类后,您还需要将其添加到 DbSet 中:
public DbSet<UserCount> UsersCount { get; set; }
但为了能够将它与您想要的查询一起使用,您需要在 DbContext 的 OnModelCreating 方法中配置它:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserCount>(x =>
{
x.ToSqlQuery("SELECT COUNT(*) AS [Total] FROM [Users]");
});
}
课程最后应该是这样的:
public class DataContext : DbContext
{
public DbSet<UserCount> UsersCount { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("yourConnectionString");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserCount>(x =>
{
x.ToSqlQuery("SELECT COUNT(*) AS [Total] FROM [Users]");
});
}
}
这样,当你触发你创建的DbSet时,它就会执行查询,例如:
class Program
{
static void Main(string[] args)
{
using var context = new DataContext();
var usersCount = context.UsersCount.First();
Console.WriteLine(usersCount.Total);
}
}