Onverklaarbare en tegenstrijdig NullReferenceExecption (Objectverwijzing niet op een exemplaar van een object) in repository patroon

stemmen
0

Huidige project:

De korte en zoete daarvan: Volgde de repository patroon gekoppeld hierboven. Als u niet bekend bent met het, zult u waarschijnlijk niet in staat zijn om me te helpen.

Dus ik heb een repository entry:

// Populating the SelectList
public Task<List<IceRelationship>> GetIceRelationshipListAsync() => Set.ToListAsync();

En in een testpagina (om ervoor te zorgen dat ik nog steeds gezond) Ik ben in staat om de lijst met perfect weer te geven (die aantonen dat het _unitOfWorkgesprek werken), door te bellen naar de lijst:

public ActionResult TestIce() {
  var list = _unitOfWork.IceRelationshipRepository.GetIceRelationshipListAsync().Result;
  return View(list);
}

En dan te dumpen op een pagina:

@model List<Fredex.Domain.Entities.IceRelationship>
@foreach(var item in Model) {
  <dl>
    <dt>@item.IceRelationshipId</dt>
    <dd>@item.IceRelationshipName</dd>
  </dl>
}

Dit werkt prachtig !!

Echter, deze lijst zou een SelectList formulieren in te vullen door de hele site. Dus in het beste belang van de DNR, heb ik mijn best gedaan om abstract uit.

De formulieren zelf hebben SelectLists:

@Html.DropDownListFor(x => x.IceRelationshipId, Model.IceRelationshipList, « ‹ Select › », htmlAttributes: new { @class = form-control required })

waar de SelectList zelf wordt bevolkt door het model:

public class IceViewModel {
  public Guid? IceId { get; set; }
  public Guid IceRelationshipId { get; set; }
  public string Title { get; set; }
  [DisplayName(@Honorific)]
  public Guid? PrefixId { get; set; }
  [DisplayName(@First Name)]
  public string FirstName { get; set; }
  [DisplayName(@Last Name)]
  public string LastName { get; set; }

  public IEnumerable<SelectListItem> IceRelationshipList => SelectLists.IceRelationshipList();
  public IEnumerable<SelectListItem> PrefixList => SelectLists.PrefixList();
}

En het model SelectListItem is ingevuld op basis van een controller te noemen SelectLists:

public static IEnumerable<SelectListItem> IceRelationshipList() {
  var list = _unitOfWork.IceRelationshipRepository.GetIceRelationshipListAsync().Result;
  var select = list.Select(x => new SelectListItem { Text = x.IceRelationshipName, Value = x.IceRelationshipId.ToString() });
  return select;
}

Het probleem is, dit is waar alles gaat helemaal fout. De oproep tot het _unitOfWorkis wat wordt gemarkeerd als een null-waarde, en het startsein voor de “referentie Object is niet op een exemplaar van een object”, hoewel het wordt gevoed vanuit de exact dezelfde repository positie als de testpagina dat de volledige lijst van relaties toont .

Een uitzondering van het type 'System.NullReferenceException' zich in Boilerplate.Web.Mvc5.Sample.dll maar werd niet behandeld gebruikerscode

Toen ik de variabele onderzoeken list, ik ben in staat om te bevestigen dat het inderdaad in de vorm List<IceRelationship>, wat betekent dat ik moet in staat zijn om uit te voeren een .Select()op het, maar alleen als het niet ongeldig is. Helaas, blijkbaar is null, hoewel aan de andere (niet-vorm) actie is het niet null !!

Enig idee waarom dingen zijn zo tegenstrijdig ?? Waarom is het _unitOfWorkzo duidelijk ingevuld mijn test pagina, maar null in mijn SelectListcontroller?


EDIT: @marc_s - zeggen dat het een duplicaat helpt niet als ik heb absoluut nul idee over hoe het is een duplicaat.

Ik ben op zoek naar twee identieke _unitOfWork statements. Men brengt weer een lijst. De andere brengt weer null. Ik heb nul idee hoe, waarom en waar er een verschil is tussen hen. Voor zover ik kan vertellen, is de functionaliteit identiek.

De vraag is gesteld op 18/03/2017 om 08:25
user
In andere talen...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more