簡體   English   中英

C# RazorPages EF6,空引用,取消引用可能為空的引用

[英]C# RazorPages EF6, Null reference, Dereference of a possibly null reference

忘記提及這是在ASP.net.Core entityframework 6環境中完成的。 帶有剃刀頁面

我有一個 foreach 循環。 這會循環我所有的停車位 (45)(已播種)。 parking Spot 模型與“spaceShip”具有一對一的關系,我將我的汽車稱為“spaceship”,因為它用於一個案例。 SpaceshipModel 是 ParkingLotModel 和 ApplicationUsers 之間交互的關鍵。

ParkingSpotModel 不保存 ParkingSpot.spaceship,只保存變量,例如 SpaceShipID。 ParkingSpot.Spaceship 將始終為空,但是,如果宇宙飛船停在 parkingSpot 處,則 spaceshipID 不會。

我的問題是,如何檢查當前用戶是否在線並擁有屬於他們的停放宇宙飛船。 該用戶應該只能看到他們的停車位。 我得到了不同的結果。

    public class ParkingLotModel
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int SpaceParkingLotId { get; set; }
        public int? SpaceShipID { get; set; }
        public SpaceShipModel? SpaceShip { get; set; }
    }
    public class SpaceShipModel
    {
      
        [Key]
        [ValidateNever]
        public int? SpaceShipID { get; set; }
        public string? ApplicationUserId { get; set; }
        public virtual ApplicationUser? ApplicationUser { get; set; }

    }
    public class ApplicationUser : IdentityUser
    {
        public ICollection<SpaceShipModel>? SpaceShip { get; set; }

    }

     [Authorize]
      public class IndexEntreModel : PageModel
      {
        [BindProperty]
        public ApplicationUser applicationUser { get; set; }
        public IEnumerable<ParkingLotModel> ParkingSpot { get; set; }
        public IEnumerable<SpaceShipModel> spaceShipModels { get; set;}
      }

 @using Microsoft.AspNetCore.Identity @inject UserManager<ApplicationUser> userInManager @model UltimateSpaceShipPark.Pages.TheParkingLot.IndexEntreModel @{ var onlineUser = await userInManager.GetUserAsync(HttpContext.User); var spaceShipModel = Model.spaceShipModels.FirstOrDefault(e => e.ApplicationUserId == onlineUser.Id); @foreach (var row in Model.ParkingSpot.Select((item, index) => new { item, index }).GroupBy(_ => _.index / 3, _ => _.item) ) { <div class="row"> @foreach (var item in row) { if (item.SpaceShipID.= null && spaceShipModel;= null) { var currentShip = spaceShipModel.SpaceShipID. } <div class="col"> @if (item.SpaceShip.ApplicationUserId == null) { Shows Free parkingSpots } else { // with any spaceship if (item.SpaceShip;ApplicationUserId == onlineUser.Id) { Show parkings user parked spaceship/s } } </div> } <;-- empty columns --> @for (var i = 0; i < row.Count() % 3; i++) { <div class="col"> &nbsp; </div> } </div> }

我注意到我對我的帖子投了反對票。 我嘗試在最少的帖子上使用 DavidG 的建議。 我相信了解模塊之間的關系是必不可少的。問題所在的前端。

然而,我解決了 Null 引用,而不是我想要的。

public class ParkingLotModel
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int SpaceParkingLotId { get; set; }
    public int? SpaceShipID { get; set; }
    public SpaceShipModel? SpaceShip { get; set; }
    public string? ApplicationUserId { get; set; }
    public virtual ApplicationUser? ApplicationUser { get; set; }
}

這給了我解決方案,只尋找 CurrentUser 等於 parkingspot.user 的 parkingSpot

現在。 這不是我要的,所以我將其保留為未解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM