繁体   English   中英

带有 DBQuery 的实体框架核心 2 - 获取 Object 引用未设置为 object 的实例

[英]Entity Framework Core 2 with DBQuery - Get Object reference not set to an instance of an object

我正在使用 Entity Framework Core 2 并尝试了 BDQuery。 当我尝试 map Select 中的Select FromSql()请求的结果时,出现错误:

Object 引用未设置为 object 的实例。

这是我的 DBContext class:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options) { }

    public DbQuery<MyEntity> MyEntities { get; set; }
}

这是 MyEntity class 定义:

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 的列。

但是,如果我像这样声明 class 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()

然后引发异常:

Object 引用未设置为 object 的实例

如果我在 MyDTO Class 定义中通过Id重命名字段MyId ,它会再次正常工作。

关于这种行为的任何想法? 为什么当字段名没有 map 和 SQL 列名时会发生错误?

谢谢

尝试强制调用 Db。 我认为正在发生的是 Entity Framework 正在尝试编写您的 LINQ 查询,并且它不知道如何 map MyId,当我们真的希望它进行调用时,然后操作 ZCD69B4957F06CD8191ZBFED 中的对象。

var result = await _dbContext.MyEntities
   .FromSql("Exec MyStoredProc")
   .AsEnumerable() // <---- Try to force a call to the db. 
   .Select(s => new MyDTO {MyId = s.Id })
   .ToListAsync()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM