私が使用するコードとクラスの量を減らすために、私はこのメソッドを与えられました:
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();
}
これはかなり非効率的なようです。それで、私はそれが機能しないようにする一般的な保存の何が本当に悪いのか疑問に思いましたか?