2017-07-26 4 views
1

これで私の髪を引き出し始めたので、ここで質問してみるといいでしょう。Db.LoadSelect throw 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 - ここPOCOSある]

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によって処理されなければならないが、多分もっとfamilierフレームワークと誰かがコメントすることができますが、それはすべての...少なくとも私にはよさそうだ

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)のいずれかの参照プロパティで設定ツールを削除することにしました。

[Reference] 
public Message Message { get; } 

べきで、もちろんされている(と、それは短い時間のために働いた理由である、いくつかの点であった):不思議ServiceStackは、プロパティを設定していないことができませんでした

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

、その後、使用しますこれはReferences APIのためのものです。

+0

私はresharperの助言の後に同じバグがありました。 – labilbe

関連する問題