我试图从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开始(。猜测你把它保存了错误
想将其写成评论,但我刚刚创建了此帐户