【发布时间】:2020-03-11 17:58:11
【问题描述】:
我正在使用 Entity Framework Core 2 并尝试了 BDQuery。当我尝试在Select 中映射FromSql() 请求的结果时,出现错误:
对象引用未设置为对象的实例。
这是我的 DBContext 类:
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options) { }
public DbQuery<MyEntity> MyEntities { get; set; }
}
这是 MyEntity 类的定义:
public class MyEntity
{
public int Id { get; set;}
}
如果在我的代码中进行以下调用,它可以正常工作(_dbContext 的类型当然是 MyDbContext):
var result = await _dbContext.MyEntities
.FromSql("Exec MyStoredProc")
.Select(s => new { s.Id })
.ToListAsync()
MyStoredProc 返回一个名为 Id 的列。
但是如果我像这样声明一个 MyDTO 类:
public class MyDTO
{
public int MyId { get; set;}
}
然后像这样拨打电话:
var result = await _dbContext.MyEntities
.FromSql("Exec MyStoredProc")
.Select(s => new MyDTO {MyId = s.Id })
.ToListAsync()
然后引发异常:
对象引用未设置为对象的实例
如果我在 MyDTO 类定义中将字段 MyId 重命名为 Id,它会再次正常工作。
对这种行为有任何想法吗?为什么字段名与SQL列名不映射时会报错?
谢谢
【问题讨论】:
-
@Çöđěxěŕ 当错误来自非用户代码时不是。
-
@IvanStoev 如果不是用户代码,错误来自哪里?
-
@Çöđěxěŕ 例如,(buggy)框架。
标签: c# entity-framework mapping ef-core-2.1