首页 > 解决方案 > 检索数据上的“对象引用未设置为对象的实例”

问题描述

我试图从 SQL 数据库中检索数据。我正在使用实体框架核心。它从数据库中检索所需的数据。我可以在调试时看到数据,但数据没有分配给var类型的变量。仅供参考,变量类型的值为0并且它基本上是一个enum,我将其类型转换为int。下面是代码

public async Task<string> GetMailTemplateByType(Models.TemplateTypes type)
    {
        var mailTemplate = await _userDbContext.MailTemplates.FirstOrDefaultAsync(mt => mt.TemplateType==((int)type));
        return mailTemplate.MailHtml;
    }

这是定义:

var HtmlTemplate = await _coreDataManager.GetMailTemplateByType(TemplateTypes.Activation);

当用try catch调试时,它的显示

你调用的对象是空的

这里有什么问题?

标签: c#linqentity-framework-core

解决方案


我们可以从您的代码中看到您收到以下邮件模板对象:Id = {aeced541-7003-437e-8f77-4605766fb62c}; MailHtml = "嗨, 
非常感谢您的注册。这里是确认链接以继续进行..."; 模板类型 = 0;

在这里,您传递了一些我们不知道的 TemplateType 值

public async Task<string> GetMailTemplateByType(Models.TemplateTypes type)
{

在这里,您将该类型值与我们在调试器窗口中看到的 MailTemplate 对象中的 TemplateType 属性进行比较

var mailTemplate = await _userDbContext.MailTemplates.FirstOrDefaultAsync(mt => mt.TemplateType==((int)type));

但是如果 type 不为 0,则不会返回 MailTemplate 对象,因为我们在调试器窗口中看到的 MailTemplate 对象的 TemplateType 值为 0,因此 FirstOrDefaultAsync 将返回 null 值,请参阅“如果找不到匹配项,则错误返回 NullReferenceException”


推荐阅读