[英]Better understanding of Entity Framework Core querying and DbSet impact
[英]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.