【发布时间】:2017-07-26 20:38:46
【问题描述】:
开始为此烦恼,所以我想我可以试试在这里问。
我有这个简单的服务:
public class EventService : Service
{
public object Get(GetEvents request)
{
return Db.LoadSelect<Event>();
}
}
LoadSelect() 抛出 NullReferenceException。
实际上我早先让它工作得很好,但不知道现在是什么导致它抛出异常。
已将其追踪到实际上在 ServiceStack (ServiceStack.OrmLite.Support.LoadList) 中引发异常的这一行:
LoadList-NullReferenceException
但是看着当地人,我觉得一切都很好。我的意思是,它显然可以从数据库中获取数据,所以那部分很好,数据是正确的,它甚至似乎解决了 ForeignKeys 等等。
所以它不能得到什么值,或者没有设置,我不知道:/
任何有关如何进一步解决此问题的提示都会很棒! =)
[EDIT1 - 这里是 POCO]
public class Event
{
[PrimaryKey]
public int Id { get; set; }
public int Timestamp { get; set; }
public int MessageId { get; set; }
[Reference]
public Message Message { get; }
}
public class Message
{
[PrimaryKey]
public int Id { get; set; }
public string Text { get; set; }
}
[EDIT2 - 阅读 dup 答案后的发现]
正如最初的问题所述,基本的 NullReferenceException 故障排除已经完成,我已尽可能深入地研究 ServiceStack 框架以尝试找出罪魁祸首。
据我所见,引发异常的调用所消耗的所有变量都正常(见下面的屏幕截图)。
唯一的一个(在下图中突出显示)应该由 ServiceStack OrmLite References API 处理,但也许更熟悉该框架的人可以发表评论,但至少在我看来这一切都很好......
LoadList-NullReferenceException-002
也许我使用的 References API 有误?
数据库结构相当简单:
事件表
| Event | CREATE TABLE `Event` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Timestamp` int(11) NOT NULL,
`MessageId` int(4) unsigned NOT NULL,
PRIMARY KEY (`Id`),
KEY `MessageId_FK` (`MessageId`),
CONSTRAINT `MessageId_FK` FOREIGN KEY (`MessageId`) REFERENCES `Message` (`Id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
mysql> SELECT * FROM Event;
+----+------------+-----------+
| Id | Timestamp | MessageId |
+----+------------+-----------+
| 1 | 1501026747 | 1 |
| 2 | 1501027047 | 1 |
+----+------------+-----------+
消息表
| Message | CREATE TABLE `Message` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Text` varchar(255) NOT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `Id_UNIQUE` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
mysql> SELECT * FROM Message;
+----+---------------------------------------------+
| Id | Text |
+----+---------------------------------------------+
| 1 | Someone is at the door! |
| 2 | 1 has acknowledged the notification. |
| 3 | 2 has acknowledged the notification. |
| 4 | 3 has acknowledged the notification. |
+----+---------------------------------------------+
异常详情
System.NullReferenceException occurred
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=ServiceStack.OrmLite
StackTrace:
at ServiceStack.OrmLite.Support.LoadList`2.SetRefSelfChildResults(FieldDefinition fieldDef, ModelDefinition refModelDef, FieldDefinition refSelf, IList childResults) in C:\TeamCity\buildAgent\work\12884bd5feef0ce7\src\ServiceStack.OrmLite\Support\LoadList.cs:line 154
【问题讨论】:
-
我知道仅仅发布异常消息的图像是没有帮助的,但正如您可能注意到的,我的图像还包括局部变量列表,它显示了应该进入的所有变量抛出异常的函数。这就是我来到这里的全部原因,因为在那方面一切看起来都很好。无论如何,已按要求复制了异常详细信息,而不是提供任何新信息。 @威尔
标签: servicestack ormlite-servicestack