Ste*_*eve 7 entity-framework-core
我有这个 sql 查询,它在实体框架 6 中使用原始 sql 并返回整数列表。
var sqlString = "SELECT DISTINCT A.ListId FROM ABC A INNER JOIN ABCLists B ON B.Id = A.ListId"
var recordIds = context.Database.SqlQuery<int>(sqlString).ToList();
Run Code Online (Sandbox Code Playgroud)
如何将上面的转换为 Entity Framework Core 3?
我尝试使用 EF Core,但不确定在哪里定义它以列表 int 类型返回。以下是我所拥有的。
var recordIds = _djContext.ABC.FromSqlRaw(sqlString).ToList();
Run Code Online (Sandbox Code Playgroud)
注意:我不需要 LINQ 版本,只需要原始 SQL。谢谢。
事实上,您只需使用以下命令“投影”查询结果Select:
string sqlString = "SELECT A.Id FROM ABC A INNER JOIN ABCLists B ON B.Id = A.Id";
List<int> recordIds = _djContext.ABC.FromSqlRaw(sqlString).Select(abc => abc.Id).ToList();
Run Code Online (Sandbox Code Playgroud)
在 EF 3.0 中,您需要声明一个专用类型,称为Keyless 实体类型
[Keyless]
public class SomeType
{
public int Ids { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后像往常一样为其定义一个 DbSet
public DbSet<SomeType> SomeTypes { get; set; }
Run Code Online (Sandbox Code Playgroud)
注意: [Keyless] 属性在 EFCore 5.0 中可用。对于 EF 3.0 您可以使用流畅的配置调用 .HasNoKey() 方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeType>().HasNoKey();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以做类似的事情:
var result = context.SomeTypes.FromSqlRaw(sqlString).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7496 次 |
| 最近记录: |