2013-06-28 7 views
5

Wenn ich den folgenden Code ausführen, bekomme ich eine NullReferenceException sagen, dass eine Objektreferenz nicht auf eine Instanz des Objekts festgelegt ist. Ich habe erfolgreich mit Dapper mit weniger komplexen Objekten aber das gleiche Format eingefügt, so bin ich mir nicht sicher, was ich falsch mache.NullReferenceException beim Einfügen mit Dapper

public void Foo(IEnumerable<FogbugzCase> cases) 
{ 
    // using a singleton for the SqlConnection 
    using (SqlConnection conn = CreateConnection()) 
    { 
     foreach (FogbugzCase fogbugzCase in cases) 
     { 
      conn.Execute("INSERT INTO fogbugz.Cases(CaseId, Title, ProjectId, CategoryId, Root, MilestoneId, Priority, Status, EstimatedHours, ElapsedHours, AssignedTo, ResolvedBy, IsResolved, IsOpen, Opened, Resolved, Uri, ResolveUri, OutlineUri, SpecUri, ParentId, Backlog) VALUES(@BugId, @Title, @ProjectId, @CategoryId, @RootId, @MilestoneId, @Priority, @StatusId, @EstimatedHours, @ElapsedHours, @PersonAssignedToId, @PersonResolvedById, @IsResolved, @IsOpen, @Opened, @Resolved, @Uri, @ResolveUri, @OutlineUri, @Spec, @ParentId, @Backlog);", new {BugId = fogbugzCase.BugId, Title = fogbugzCase.Title, ProjectId = fogbugzCase.Project.Id, CategoryId = fogbugzCase.Category.Id, RootId = fogbugzCase.Root, MilestoneId = fogbugzCase.Milestone.Id, Priority = fogbugzCase.Priority, StatusId = fogbugzCase.Status.Id, EstimatedHours = fogbugzCase.EstimatedHours, ElapsedHours = fogbugzCase.ElapsedHours, PersonAssignedToId = fogbugzCase.PersonAssignedTo.Id, PersonResolvedById = fogbugzCase.PersonResolvedBy.Id, IsResolved = fogbugzCase.IsResolved, IsOpen = fogbugzCase.IsOpen, Opened = fogbugzCase.Opened, Resolved = fogbugzCase.Resolved, Uri = fogbugzCase.Uri, OutlineUri = fogbugzCase.OutlineUri, Spec = fogbugzCase.Spec, ParentId = fogbugzCase.ParentId, Backlog = fogbugzCase.Backlog}); 
     } 
    } 
} 

Ich versuchte zunächst, in fogbugzCase anstelle der anonymen Aufgabe nur auf dem Durch die einfachere Art und Weise zu tun, aber in einer anderen Ausnahme über CategoryId geführt.

Wer sieht, was ich vermisse?

+1

Setzen Sie einen Haltepunkt und überprüfen Sie alle Ihre Objekte. Wenn ich raten müsste, basierend auf dem, was Sie über die CategoryId gesagt haben, kann "fogbugzCase.Category" null sein. Aber überprüfe alles. Wenn Sie auf eine Eigenschaft einer Nullreferenz zugreifen, erhalten Sie eine 'NullReferenceException'. – zimdanen

+0

@zimdanen thx, da war etwas null - nur versuchen, einen Weg zu finden, das jetzt zu überprüfen. –

+1

Fast alle Fälle von 'NullReferenceException' sind identisch. Für einige Hinweise siehe "[Was ist eine NullReferenceException in .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)". –

Antwort

6

Es klingt wie eine der Eigenschaften ist null. Teilen Sie den Code:

var args = new {BugId = fogbugzCase.BugId, Title = fogbugzCase.Title, ProjectId = fogbugzCase.Project.Id, CategoryId = fogbugzCase.Category.Id, RootId = fogbugzCase.Root, MilestoneId = fogbugzCase.Milestone.Id, Priority = fogbugzCase.Priority, StatusId = fogbugzCase.Status.Id, EstimatedHours = fogbugzCase.EstimatedHours, ElapsedHours = fogbugzCase.ElapsedHours, PersonAssignedToId = fogbugzCase.PersonAssignedTo.Id, PersonResolvedById = fogbugzCase.PersonResolvedBy.Id, IsResolved = fogbugzCase.IsResolved, IsOpen = fogbugzCase.IsOpen, Opened = fogbugzCase.Opened, Resolved = fogbugzCase.Resolved, Uri = fogbugzCase.Uri, OutlineUri = fogbugzCase.OutlineUri, Spec = fogbugzCase.Spec, ParentId = fogbugzCase.ParentId, Backlog = fogbugzCase.Backlog}); 
conn.Execute("INSERT INTO fogbugz.Cases(CaseId, Title, ProjectId, CategoryId, Root, MilestoneId, Priority, Status, EstimatedHours, ElapsedHours, AssignedTo, ResolvedBy, IsResolved, IsOpen, Opened, Resolved, Uri, ResolveUri, OutlineUri, SpecUri, ParentId, Backlog) VALUES(@BugId, @Title, @ProjectId, @CategoryId, @RootId, @MilestoneId, @Priority, @StatusId, @EstimatedHours, @ElapsedHours, @PersonAssignedToId, @PersonResolvedById, @IsResolved, @IsOpen, @Opened, @Resolved, @Uri, @ResolveUri, @OutlineUri, @Spec, @ParentId, @Backlog);", args); 

Es ist der Code in der ersten Zeile ausfällt, ist es nichts mit adrett zu tun - es nicht einmal irgendwo in der Nähe adrett hatte. Sie müssen alle verschachtelten Mitglieder überprüfen.

+0

das hat funktioniert, thx. Jetzt bekomme ich eine NotSupportedException, die ich gerade nach [hier] gefragt habe (http://stackoverflow.com/questions/17375134/notsupportedexception-when-inserting-with-dapper) –

Verwandte Themen