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。
我开始为此烦恼,所以我想我可以试着在这里问一下。
我有这个简单的服务:
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。