soy nuevo programando con c# junto con sus demás herramientas. Tengo un proyecto que debo hacer uso de UPDATE, INSERT, DELETE de una base de datos SQL Server local a travéz de Linq. El problema que me genera es: System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.' El cual ya he buscado problemas similares lo que indican es que se está usando una variable en NULL, pero en mi caso es confuso porque tengo todas las variables que uso inicializadas y aún así no funciona.
En el siguiente código estoy intentando hacer UPDATE a un Product ya existente en la base de datos, hasta ahora mi método si lo agrega a la DB, pero después se cae indicando lo anterior, imagino que tiene que ver con la lista de productos que estoy usando, pero no lo logro resolverlo y ya llevo horas en este problema.
Le doy save para actualizar la información del producto:
Y me genera el error (ignoren los if de comprobaciones):
private void btnSave_Click(object sender, EventArgs e)
{
if (!prd.Code.Equals(updCode.Text.Trim()))
{
prd.Code = updCode.Text.Trim();
}
else if (!prd.DescriptionPrt.Equals(updDescription.Text.Trim()))
{
prd.DescriptionPrt = updDescription.Text.Trim();
}
else if (prd.Price != Convert.ToDecimal(updPrice.Text.Trim()))
{
prd.Price = Convert.ToDecimal(updPrice.Text.Trim());
}
else if (prd.Stock != Convert.ToInt32(updStock.Text.Trim()))
{
prd.Stock = Convert.ToInt32(updStock.Text.Trim());
}
else
{
MessageBox.Show("nothing was updated", "Error");
return;
}
parent.isUpdated = true;
SalesAdminManager.GetInstance().saveChanges();
DialogResult result = MessageBox.Show("Successfully updated", "Successfully");
changeUpdating(false);
isUpdating = false;
}
El botón Save es el que llama a SalesAdminManager, el encargado de la lógica (lo tengo como SINGLETON):
El método SaveChanges() llama al DAO que ya es el código autogenerado por la herramienta:
public void saveChanges() {
DAOSalesAdmin.SaveChanges();
}
En lo que se genera la herramienta:
public class SalesAdminManager
{
private SalesAdministrationEntities DAOSalesAdmin = new SalesAdministrationEntities();
private CustomerList customerList = new CustomerList();
private ProductList prdList = new ProductList();
private static SalesAdminManager _INSTANCE = new SalesAdminManager();
private SalesAdminManager() {
}
public static SalesAdminManager GetInstance() {
return _INSTANCE;
}
Lo más raro es que en ocaciones si funciona y en tras no, igualmente estoy trabajando con clientes y me da el mismo problema al usar DELETE con ellos. Espero me pueda ayudar, sería de muchísima ayuda.
Por otra parte, los datos obtenidos de la base de datos los estoy almacenando en una List:
public class ProductList
{
private List<Product> prdList = new List<Product>();
public ProductList()
{
}
}
Métodos en los que el manager utiliza las listas (SalesAdminManager):
//PRODUCT
//local
public Product findProduct(String code)
{
if (code == null)
{
throw new ArgumentNullException("You must first select a product");
}
return prdList.find(code);
}
//data base
public Product findProductInDB(String code)
{
if (code == null)
{
throw new ArgumentNullException("You must first select a product");
}
return DAOSalesAdmin.Products.Find(code);
}
public bool insertProduct(Product prd)
{
if (findProduct(prd.Code) == null)
{
DAOSalesAdmin.Products.Add(prd);
prdList.add(prd);
saveChanges();
return true;
}
return false;
}
public void deleteProduct(Product prd)
{
DAOSalesAdmin.Products.Remove(prd);
prdList.delete(prd);
saveChanges();
}
public List<Product> createProductList()
{
return prdList.createList(DAOSalesAdmin.Products.ToList());
}
public ProductList getProductList()
{
return prdList;
}