关于检索数据"Object reference not set to an instance of an object"



我试图从SQL数据库中检索数据。我正在使用实体框架Core 。它从数据库中检索所需的数据。我可以在调试时看到数据到达,但数据未分配给类型 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);

当与调试>尝试catch 时,它显示

对象引用未设置为对象的实例

这里有什么问题?

我们可以从您的代码中看到您收到以下邮件模板对象:id = {AECED541-7003-437E-8F77-4605766FB62C};mailhtml =" hi,&nbsp;
非常感谢您注册。TemplateType = 0;

在这里,您正在传递一些我们不知道

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

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

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

但是,如果类型不是0,则它将不会返回mailTemplate对象,因为我们在调试器窗口中看到的mailTemplate对象的templateType值为0,因此firstordordefaulteaultAsync将返回null值,请参见"如果没有匹配,请参见"错误返回nullreference"。被发现"

public async Task<string> GetMailTemplateByType(Models.TemplateTypes type)
{
  var mailTemplate = /*your expression from screenshot*/.FirstOrDefault();
  if(mailTemplate = null)
    throw new NullReferenceException();
  return mailTemplate;
}
..........................
try
{
  GetMailTemplateByType(TemplateTypesVariable);
}
catch(NullReferenceException err)
{
   Console.WriteLine("template does not exist");
}

看来您正在尝试接收不存在的数据。

为什么您甚至选择整个对象?EF核与SQL一样,选择您需要的东西(就您而言,只需做一个

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

,但这仍然不起作用,因为您的实体说TemplateType为0(您的枚举以1开始(。猜测你把它保存了错误

想将其写成评论,但我刚刚创建了此帐户

相关内容

  • 没有找到相关文章

最新更新