Db.LoadSelect 抛出 NullReferenceException

Db.LoadSelect throws NullReferenceException

我开始为此烦恼,所以我想我可以试着在这里问一下。

我有这个简单的服务:

public class EventService : Service
{
    public object Get(GetEvents request)
    {
        return Db.LoadSelect<Event>();
    }
}

LoadSelect() 抛出 NullReferenceException。

实际上我早些时候让它运行得很好,但不知道现在是什么导致它抛出异常。

已经追踪到实际上在 ServiceStack (ServiceStack.OrmLite.Support.LoadList) 中抛出异常的这一行:

LoadList-NullReferenceException

但是看着当地人,我觉得一切都很好。我的意思是,它显然可以从数据库中获取数据,所以那部分没问题,数据是正确的,它甚至似乎可以解析外键等等。

所以它无法获取或未设置什么值,我不知道:/

任何有关如何进一步解决此问题的提示都很棒! =)

[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 - 阅读重复答案后的发现]

如最初问题中所述,已执行基本的 NullReferenceException 故障排除,我已尽可能深入地挖掘 ServiceStack 框架以尝试找出罪魁祸首。

据我所知,抛出异常的调用所消耗的所有变量都正常(请参见下面的屏幕截图)。

唯一的一个(在下图中突出显示)应该由 ServiceStack OrmLite 参考 API 处理,但也许更熟悉该框架的人可以发表评论,但至少在我看来一切都不错。 ..

LoadList-NullReferenceException-002

也许我使用的参考文献 API 有误?

数据库结构很简单:

事件Table

| 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 |
+----+------------+-----------+

留言Table

| 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\work884bd5feef0ce7\src\ServiceStack.OrmLite\Support\LoadList.cs:line 154

为了回答我自己的问题,出于某种原因,我决定删除其中一个 POCO (Event.Message) 的引用 属性 上的 setter。

[Reference]
public Message Message { get; }

当然应该(并且在某个时候,这就是为什么它在短时间内起作用的原因):

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

难怪ServiceStack不能设置属性,然后用它来引用API。