J'utilise Entity Framework 4.0. Est-il possible que SaveChanges()
renvoie 0 mais ne lève pas d'exception? Par exemple, après avoir ajouté.
Voici mon code:
try
{
_context.CodeProducts.Add(entity);
_context.SaveChanges();
//Shell I control return result from SaveChanges() in here.
//However doesn't throw an exceoption?
return new MethodResponse()
{
ResultText = "Successful",
Type = MethodResponse.ResponseType.Succeed
};
}
catch (OptimisticConcurrencyException exc)
{
throw exc;
}
catch (UpdateException exc)
{
throw exc;
}
catch (Exception exc)
{
throw exc;
}
Selon la documentation , la valeur de retour de DbContext.SaveChanges
est
Nombre d'objets écrits dans la base de données sous-jacente.
Ainsi, ce que vous voyez n'est possible que lorsqu'aucune entité n'a besoin d'être enregistrée dans la base de données.
La fonction db.SaveChanges () d'Entity Framework pour les suppressions et les sauvegardes renvoie le nombre de lignes effectuées. En test utilisant le framework Fakes (talons et cales), la valeur renvoyée sera toujours 0. S'il y a une erreur dans l'appel, une exception sera levée. Cela implique que toute méthode d'appel reposant sur une valeur supérieure à zéro renvoyée par db.SaveChanges pour confirmation ne peut pas être testée pour cette même valeur. Cela peut s'avérer critique lorsqu'une méthode utilise la valeur de retour db.SaveChanges () pour évaluer le nombre de lignes affectées dans une opération donnée.
Ma réponse ne parle pas de DbContext
, mais si quelqu'un utilise XEntities
et a le même problème, vous pouvez essayer:
using (var entities = new XEntities())
{
var product = entities.Products.SingleOrDefault(x => x.Id == id);
product.Type = "New type"; // modifying
int flag = entities.SaveChanges(); // 1
// or await entities.SaveChangesAsync(); // 1
}
Le problème:
public class Demo
{
private XEntities _entities = new XEntities();
public void Test(int id)
{
var product = _entities.Product.SingleOrDefault(x => x.Id == id);
product.Type = "New type"; // modifying
int flag = _entities.SaveChanges(); // 0 <<<====
// or await entities.SaveChangesAsync(); // 0 <<<====
// you need to create new instance of XEntities to apply changes
}
}