2017-07-26 142 views
1

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

據我所知,只是發佈一個圖像只是異常消息是沒有用的,但正如你可能會注意到的,我的圖像還包括局部變量列表,它顯示了所有應該進入拋出異常的函數的變量。這就是我在這裏開始的全部原因,因爲一切都看起來很好。 無論如何,已根據要求複製到「例外」詳細信息中,而不是提供任何新信息。 @Will – Max

回答

2

爲了回答我自己的問題,出於某種原因,我決定刪除其中一個POCO(Event.Message)的引用屬性的setter。當然

[Reference] 
public Message Message { get; } 

應該是(並且是在某些時候,這就是爲什麼它的工作時間很短):

[Reference] 
public Message Message { get; set; } 

難怪ServiceStack無法設置的屬性,然後使用它爲參考API。

+0

根據resharper的建議,我有同樣的錯誤。 – labilbe

相關問題