【发布时间】:2023-03-07 14:39:02
【问题描述】:
尝试使用 DbQuery。我需要使用原始 sql 获取非实体类型 UserDetailDTO。将 DbQuery 添加到上下文并从控制器调用它。但它会生成 system.Data.SqlTypes.SqlNullValueException。
我的背景:
public class TrainingAppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbQuery<UserDetailDTO> UserDetailDTO { get; set; }
public TrainingAppDbContext(DbContextOptions<TrainingAppDbContext> options)
: base(options)
{
Database.EnsureCreated();
}
}
控制器:
public class AccountController : Controller
{
private readonly TrainingAppDbContext ct;
public AccountController(TrainingAppDbContext ct)
{
this.ct = ct;
}
public IActionResult Test()
{
var results = ct.UserDetailDTO.FromSql("SELECT * FROM users").ToList();
return View();
}
}
当我从上下文调用我的 UserDetailDTO 时,它会生成一个错误。
【问题讨论】:
-
无法给出具体答案,因为问题出在
UserDetailDTO类和/或SQL 查询的列中。您需要检查 SQL 查询是否允许某些未映射到 DTO 中可为空类型的列中的 NULL 值。 -
User和UserDetailDTO的定义是什么?您在TrainingAppDbContext中定义 dto 有什么原因吗?您应该只定义实体,然后通过自动映射器将实体映射到控制器中的 dto。
标签: asp.net entity-framework asp.net-core entity-framework-core