in Repository Pattern System.NullReferenceException
Delete Method
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Microsoft.EntityFrameworkCore
StackTrace:
at Microsoft.EntityFrameworkCore.Internal.EntityFinder`1.ValidateKeyPropertiesAndExtractCancellationToken(Object[] keyValues, Boolean async, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Internal.EntityFinder`1.Find(Object[] keyValues)
at BL.Repositories.BaseRepository`1.GetById(Nullable`1 id) in E:\Programming\Folder\SoqRepository\BL\Repositories\BaseRepository.cs:line 51
What I have tried:
Class from database
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; }
}
Class Interface
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));
}
implement interface
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;
}
}
Controller
public ActionResult Delete(int ItemId)
{
if (ItemId == null)
{
return BadRequest("ItemId is null");
}
var Obj = baseRepository.GetById(ItemId);
baseRepository.Delete(Obj);
return RedirectToAction("List");
}