我正在以下情况下测试我的存储库类:
首先,我向
发出呼叫Insert(TEntity entity)
已存在的实体。效果很好,EF给了我一个重复的键错误,很好。
之后,我重新发出对
的呼叫Insert(TEntity entity)
但现在具有不同的数据;但是EF会生成与上一次调用相同的SQL语句。
public class EfRepository<TEntity> : IRepository<TEntity>
where TEntity : Entity
{
protected EcmsDbContext Context;
internal DbSet<TEntity> DbSet;
public EfRepository(EcmsDbContext context)
{
Context = context;
DbSet = Context.Set<TEntity>();
}
public virtual async Task<bool> Insert(TEntity entity)
{
try
{
DbSet.Add(entity);
return await Context.SaveChangesAsync() > 0;
}
catch (Exception e)
{
return false;
}
}
}
答案 0 :(得分:1)
如果您尝试进行插入,则作为异常处理程序,如果您未处置DbContext或分离了最初添加的实体,则尝试使用新的调整后的实体发出插入,即“首先”实体仍将尝试保存。
我认为这应该有效:
try
{
DbSet.Add(entity);
return await Context.SaveChangesAsync() > 0;
}
catch (Exception e)
{
Context.Entry(entity).State = EntityState.Detached;
return false;
}