開始把我的頭髮拉出來,所以我想我可能會試着在這裏問。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