繁体   English   中英

在没有 DbSet 的情况下查询 Entity Framework Core

[英]Querying Entity Framework Core Without DbSet

我正在使用 Entity Framework Core 开发数据驱动的解决方案。 我使用ExecuteRawSQL()动态创建 SQL 服务器表,并根据我正在读取的文件的内容构建查询字符串。我想查询这些表,但我没有它们的 DbSet,因为它们是动态创建的。 我尝试使用: ExecuteRawSQL("SELECT * FROM...")但这仅返回受影响的行数。

理想情况下,我希望以字典的形式(键 = 列名,值 = 列值)从此查询中取回每一行。 有任何想法吗? 谢谢!

在 EF Core 中,您可以使用 DbContext Set<T>()方法,然后FromRawSql()检索数据并将结果转换为未注册为DbSet<T>的域 class 。

在这个例子中,我创建了一个 Cat object 来表示 Cats 表中的一行:

public class Cat
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Breed { get; set; }
}

现在 EF Core 知道如何投影结果:

var context = new SampleDbContext();

var cats = context
    .Set<Cat>()
    .FromSqlRaw("SELECT * FROM Cats")
    .ToList();

但是,您必须将 EF Core 告诉 map object 到DbContext class 上的数据库表:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Cat>().ToTable("Cats");
}

同样重要的是,您将结果投影到的 object 与您从中提取数据的表具有完全相同的属性,否则您会遇到异常。

我不确定如何将结果格式化为字典,但可以在FromRawSql() Select() ) 。

var links = context.Set<Cat>()
    .FromSqlRaw("SELECT * FROM Cats")
    .Select(c =>
        new
        {
            Key = nameof(c.Id),
            Value = c.Id
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM