Lorsque je tente de récupérer un objet à partir d'une base de données locale, il génère une exception« séquence ne contient aucun élément » erreur dans Entity Framework
séquence ne contient aucun élément
échantillon Cependant, j'ai ajouté données dans la base de données. Qu'est-ce qui peut causer cette erreur?
private void BindObjectToControls()
{
Item = new Item();
//set values entered by user into UI to corresponding properties of the object
try
{
Item.Description = cbxType.Text.ToString() + ", " + tbxDesc.Text;
Item.Category = (string)cbxCategory.SelectedItem;
Item.Brand = (string)cbxBrand.SelectedItem;
Item.Price = (int)nudPrice.Value;
}
catch(NullReferenceException ex)
{
MessageBox.Show("Error" + ex);
}
}
private void Save()
{
BindObjectToControls();
ComputerUZEntities db = new ComputerUZEntities();
if (isNew)
{
db.Items.Add(Item);
}
else
{
Item myItem = (from ctx in db.Items where ctx.ItemID == Item.ItemID select ctx).Single();
//Item is global variable.
myItem.Description = Item.Description;
myItem.Category = Item.Category;
myItem.Brand = Item.Brand;
myItem.Price = Item.Price;
}
db.Items.SqlQuery(sql);
db.SaveChanges();
MessageBox.Show("Saved!");
this.Close();
}
P.S J'ai essayé tous les 4 appels Single
, SingleOrDefault
, First
, FirstOrDefault
. Aucun d'entre eux n'a travaillé.
Vous dites que l'ID est déjà dans la base de données, je trouve cela très improbable. Placez un point d'arrêt sur votre requête, recherchez l'ID, puis vérifiez manuellement la base de données. En outre, avoir une variable globale qui représente un élément que vous attachez à un contexte EF est une mauvaise idée. – Rob
Désolé la version précédente n'était pas compréhensible, j'ai ajouté plus de lignes de code. So Item est une variable globale et instanciée dans la méthode BindObjectToControls, puis la méthode Save appelle cette méthode –