为了减少我使用的代码和类的数量,我得到了这种方法:
public TEntity Save(TEntity entity)
{
var validatationErrors = Entities.GetValidationErrors().ToList();
if (validatationErrors.Count() > 0)
throw new ValidateException(validatationErrors);
if (Entities.Entry(entity).State == EntityState.Added)
Entities.Set<TEntity>().Add(entity);
else
Entities.Set<TEntity>().Attach(entity);
Entities.SaveChanges();
Entities.Entry(entity).Reload();
return entity;
}
但是,当我创建一个新产品时,它会跳过将其添加到数据库的条件。因此没有得救。同样,如果我尝试修改它不会改变的东西。
为了解决这个问题,我必须将我的实体保存在控制器中,如下所示:
using (var db = new EntitiesDbContext())
{
db.Products.Attach(product);
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
}
这似乎相当低效。所以我想知道导致它不起作用的通用保存真的有什么问题?