我使用Entity Framework 4.0。 SaveChanges()
是否可能返回0但不会抛出异常?例如,添加后。
这是我的代码:
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;
}
答案 0 :(得分:27)
答案 1 :(得分:3)
实体框架的删除和保存的db.SaveChanges()返回正在生效的行数。但是,在使用Fakes Framework(存根和填充程序)的测试中,返回的值将始终为0.如果调用中存在错误,则将引发异常。这意味着任何依赖于从db.SaveChanges返回的大于零的值的调用方法都无法针对相同的值进行测试。当方法使用db.SaveChanges()返回值来评估给定操作中受影响的行数时,这可能很重要。
答案 2 :(得分:0)
我的回答没有提及DbContext
,但如果有人使用XEntities
并遇到同样的问题,您可以尝试:
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
}
问题:
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
}
}
答案 3 :(得分:0)
注意到如果您更新实体,但实际上没有任何更改,SaveChangesAsync()
将返回0
,而Exception
将是null
。