2017-07-26 71 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

相关问题