在試圖減少代碼和班級我用我一直在考慮這個方法量:通用實體保存方法不起作用?
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();
}
這似乎是相當低效。 所以我想知道真的是什麼問題的通用保存,使其無法正常工作?
你有設置狀態來添加/修改?也就是說,Entities.Entry(entity).State' =='EntityState.Added'或'EntityState.Modified'? – 2012-04-27 05:43:53
我在哪裏設置?我目前正從控制器操作中設置它,但這看起來效率很低。 – Johannes 2012-04-27 14:08:02