Ja *_* Da 3 .net c# entity-framework-core ef-core-6.0
所以我正在从 .NET Framework 迁移到 .NET 6。我在一个函数中,我接手的那个人花了第 693 - 760 行在 SQL 中生成查询并获取结果:
var result = db.Database.SqlQuery<CustomObject>(sqlQuery.ToString(), parameters.ToArray());
Run Code Online (Sandbox Code Playgroud)
但我非常友善地获悉:
“DatabaseFacade”不包含“SqlQuery”的定义,并且找不到接受“DatabaseFacade”类型的第一个参数的可访问扩展方法“SqlQuery”(您是否缺少 using 指令或程序集引用?)
我正在System.Data.Entity按照文档所说使用。我知道我能做到db.[TableName].FromSqlRaw,但我不能使用它,因为我需要的对象不在数据库中。
我有以下包裹,但我可能缺少一些东西?
因此,我最近经历了从 EF 迁移到 EF Core 的相同过程。
如果您的实体不在数据库中,并且仅基于 SQL 查询,则可以使用Keyless实体并映射到NULL视图。文档:https://learn.microsoft.com/en-us/ef/core/modeling/keyless-entity-types? tabs=data-annotations
添加您的实体类(应与查询结果匹配)
public class Person
{
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将集合添加到您的DbContext作为DbSet:
public class FooContext : DbContext
{
....
public virtual DbSet<Person> Persons { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要使实体无键,您可以使用属性[Keyless],或者使用 Fluent 语法DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Person>()
.HasNoKey()
// ToView should be NULL, or you can Map to an SQL View here
.ToView(null);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样查询Persons:
var paramss = new[] { new SqlParameter("@foo", 123) };
fooContext.Persons.FromSqlRaw("SELECT Name, DateOfBirth From Persons", paramss).AsEnumerable();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4763 次 |
| 最近记录: |