रिपॉजिटरी पैटर्न में System.nullreferenceexception


रिपोजिटरी पैटर्न System.NullReferenceException में
हटाएँ विधि

System.NullReferenceException
HRपरिणाम=0x80004003
संदेश=ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।
स्रोत=Microsoft.EntityFrameworkCore
स्टैक ट्रेस:
Microsoft.EntityFrameworkCore.Internal.EntityFinder`1.ValidateKeyPropertiesAndExtractCancelationToken(Object) पर[] keyValues, बूलियन एसिंक्स, कैंसिलेशनटोकन कैंसिलेशनटोकन)
Microsoft.EntityFrameworkCore.Internal.EntityFinder`1.Find(Object) पर[] कुंजीमूल्य)
BL.Repositories.BaseRepository`1.GetById(Nullable`1 id) पर E:\Programming\Folder\SoqRepository\BL\Repositories\BaseRepository.cs:line 51

मैंने क्या प्रयास किया है:

डेटाबेस से कक्षा

सी#
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; }
}

क्लास इंटरफ़ेस

सी#
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);
    }
}

सी#
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));
        }

इंटरफ़ेस लागू करें

सी#
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;
            }
        }

नियंत्रक

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

        return BadRequest("ItemId is null");
    }

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

    return RedirectToAction("List");
}

समाधान 1

त्रुटि संदेश के रूप में, समस्या हटाएँ विधि में है। डिलीट विधि LapShopContext.Set().Remove(entity) का उपयोग करके संदर्भ से एक इकाई को हटाने का प्रयास करती है। हालाँकि, आप जिस त्रुटि का सामना कर रहे हैं वह एक NullReferenceException है, जो बताती है कि इकाई पैरामीटर शून्य है। समस्या इसलिए हो सकती है क्योंकि निर्दिष्ट आईडी नहीं मिलने पर GetById विधि शून्य हो जाती है, और आप डिलीट को कॉल करने से पहले शून्य की जांच नहीं कर रहे हैं। आप नियंत्रक कोड को नीचे दिए अनुसार संशोधित कर सकते हैं:

सी#
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");
}

コメント

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