2013-06-28 14 views
5

Quando si esegue il codice seguente, viene visualizzata una NullReferenceException che indica che un riferimento a un oggetto non è impostato su un'istanza dell'oggetto. Ho inserito con successo dapper usando oggetti meno complessi ma dello stesso formato, quindi non sono sicuro di cosa sto facendo male.NullReferenceException quando si inserisce con 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}); 
     } 
    } 
} 

primo luogo ho provato a fare il modo più semplice di solo di passaggio in fogbugzCase anziché l'oggetto anonimo ma ha determinato un'eccezione diverso CategoryId.

Qualcuno vede cosa mi manca?

+1

Inserisci un punto di interruzione e controlla tutti gli oggetti. Se dovessi indovinare, basandomi su ciò che hai detto su CategoryId, 'fogbugzCase.Category' potrebbe essere nullo. Ma controlla tutto. Se si accede a una proprietà di riferimento null, si otterrà una 'NullReferenceException'. – zimdanen

+0

@zimdanen thx, c'era qualcosa di nullo - solo cercando di trovare il modo di controllarlo adesso. –

+1

Quasi tutti i casi di 'NullReferenceException' sono uguali. Per alcuni suggerimenti, vedere "[Cos'è una NullReferenceException in .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)". –

risposta

6

Sembra che una delle proprietà sia null. Dividere il codice:

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); 

E 'il codice non riesce nella prima riga, non è niente a che fare con dapper - non ha nemmeno arrivare vicino Dapper. Dovrai controllare tutti i membri annidati.

+0

che ha funzionato, grazie. Ora ricevo una NotSupportedException che ho appena chiesto a proposito di [qui] (http://stackoverflow.com/questions/17375134/notsupportedexception-when-inserting-with-dapper) –

Problemi correlati