Pengecualian System.nullreference dalam pola repositori

pemrograman

[ad_1]

di Sistem Pola Repositori.NullReferenceException
Hapus Metode

Sistem.NullReferenceException
HHasil=0x80004003
Pesan=Referensi objek tidak disetel ke instance objek.
Sumber=Microsoft.EntityFrameworkCore
Pelacakan Tumpukan:
di Microsoft.EntityFrameworkCore.Internal.EntityFinder`1.ValidateKeyPropertiesAndExtractCancellationToken(Objek[] keyValues, Boolean async, CancellationToken cancellationToken)
di Microsoft.EntityFrameworkCore.Internal.EntityFinder`1.Find(Object[] nilai kunci)
di BL.Repositories.BaseRepository`1.GetById(Nullable`1 id) di E:\Programming\Folder\SoqRepository\BL\Repositories\BaseRepository.cs:line 51

Apa yang saya coba:

Kelas dari database

C#
using System;
using System.Collections.Generic;

namespace Sq.Models;

public partial class VwItem
{
    public string ItemName { get; set; } = null!;
    public decimal PurchasePrice { get; set; }
    public decimal SalesPrice { get; set; }
    public int CategoryId { get; set; }
    public string? ImageName { get; set; }
    public DateTime CreatedDate { get; set; }
    public string CreatedBy { get; set; } = null!;
    public int CurrentState { get; set; }
    public string? UpdatedBy { get; set; }
    public DateTime? UpdatedDate { get; set; }
    public string? Description { get; set; }
    public string? Gpu { get; set; }
    public string? HardDisk { get; set; }
    public int? ItemTypeId { get; set; }
    public string? Processor { get; set; }
    public int? RamSize { get; set; }
    public string? ScreenReslution { get; set; }
    public string? ScreenSize { get; set; }
    public string? Weight { get; set; }
    public int? OsId { get; set; }
    public string CategoryName { get; set; } = null!;
    public string ItemTypeName { get; set; } = null!;
    public string OsName { get; set; } = null!;
    public int ItemId { get; set; }
}

Antarmuka Kelas

C#
using Sq.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain.Interfaces
{
    public interface IBaseRepository <t> where T : class
    {
        public IEnumerable<t>GetAll();
        public IEnumerable<t> GetAll(Func<t, bool=""> Condition);
        public T GetById(int? id);
        public void Delete(T Entity);
        public void ChangeState(int id);
    }
}

C#
using Domain.Interfaces;
using Sq.BL;
using Sq.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BL.Repositories
{
    public class BaseRepository<t> : IBaseRepository<t> where T : class
    {
        public LapShopContext LapShopContext;
        public BaseRepository(LapShopContext _LapShopContext)
        {
            LapShopContext = _LapShopContext ?? throw new ArgumentNullException(nameof(_LapShopContext));
        }

mengimplementasikan antarmuka

C#
using Sq.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain.Interfaces
{
    public interface IBaseRepository <t> where T : class
    {
        public T GetById(int? id);
        public void Delete(T Entity);
    }
}
        public T GetById(int? id)
        {
            try
            {
                return LapShopContext.Set<t>().Find(id);
            }
            catch (Exception)
            {
                return null;
            }
        }

        public void Delete(T entity)
        {
            try
            {
                LapShopContext.Set<t>().Remove(entity);
                LapShopContext.SaveChanges();
            }
            catch (Exception)
            {
             return;
            }
        }

Pengendali

C#
public ActionResult Delete(int ItemId)
{
    if (ItemId == null)
    {

        return BadRequest("ItemId is null");
    }

    var Obj = baseRepository.GetById(ItemId);
    baseRepository.Delete(Obj);

    return RedirectToAction("List");
}

Solusi 1

Sebagai pesan kesalahan, masalahnya ada pada metode Hapus. Metode Hapus mencoba menghapus entitas dari konteks menggunakan LapShopContext.Set().Remove(entity). Namun, kesalahan yang Anda temui adalah NullReferenceException, yang menunjukkan bahwa parameter entitas adalah null. Masalahnya mungkin terjadi karena metode GetById mengembalikan null ketika id yang ditentukan tidak ditemukan, dan Anda tidak memeriksa null sebelum memanggil Hapus. Anda dapat memodifikasi kode Pengontrol seperti di bawah ini:

C#
public ActionResult Delete(int ItemId)
{
    if (ItemId == 0)
    {
        return BadRequest("ItemId is invalid");
    }
    var Obj = baseRepository.GetById(ItemId);
    if (Obj == null)
    {
        return NotFound($"Item with ID {ItemId} not found");
    }
    baseRepository.Delete(Obj);
    return RedirectToAction("List");
}

[ad_2]

コメント

タイトルとURLをコピーしました