开始把我的头发拉出来,所以我想我可能会试着在这里问。Db.LoadSelect抛出NullReferenceException
我有这个简单的服务:
public class EventService : Service
{
public object Get(GetEvents request)
{
return Db.LoadSelect<Event>();
}
}
的LoadSelect()抛出一个NullReferenceException。
我实际上已经在早些时候完美地工作,但不知道现在是什么导致它抛出异常。
有无跟踪它到这条线,实际上是抛ServiceStack(ServiceStack.OrmLite.Support.LoadList)中的异常:
LoadList-NullReferenceException
但是看着当地人,一切似乎没什么问题。我的意思是,它显然可以从数据库中获取数据,所以这部分很好,数据是正确的,甚至似乎可以解决ForeignKeys和所有问题。
那么看重它无法获得,或没有设置,我不知道:/
如何解决这个任何提示进一步的将是巨大的! =)
[EDIT1 - 这里是波苏斯]
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框架以尝试识别罪魁祸首。
就我所见,引发异常的所有变量都是okey(请参见下面的截图)。
唯一一个(下图中高亮显示),应该由ServiceStack OrmLite参考API来处理,但也许有人更熟悉并且与该框架可以发表评论,但是这一切对我来说很好ATLEAST ......
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
据我所知,只是发布一个图像只是异常消息是没有用的,但正如你可能会注意到的,我的图像还包括局部变量列表,它显示了所有应该进入抛出异常的函数的变量。这就是我在这里开始的全部原因,因为一切都看起来很好。 无论如何,已根据要求复制到“例外”详细信息中,而不是提供任何新信息。 @Will – Max