درود و سپاس فراوان از آموزش هاتون
مشکلی که دارم اینه که زمانی که می خوام تو یک واحد using از یک ریپوزیتوری Get و با یک ریپوزیتوری دیگه عملیات Update انجام بدم error می ده
using (UnitOfWork db = new UnitOfWork())
{
var stuffsDetail = db.StuffsDetailRepository.Get().Last();
List<DataLayer.Store> result = new List<Store>();
result.AddRange(db.StoreRepository.Get(c => c.StuffId == stuffsDetail.StuffId));
DataLayer.Store store = new DataLayer.Store()
{
SalePrice = stuffsDetail.SalePrice,
Stock = result[0].Stock + stuffsDetail.StuffNumber,
StoreId = result[0].StoreId,
StuffId = result[0].StuffId
};
db.StoreRepository.Update(store);
db.save();
BindGrid();
{خطایی هک که میده تو عکس گذاشتم

کد آپدیست را به شکل زیر تغییر دهید
public void UpdateComment(ArticleComment comment)
{
var local = db.Set<ArticleComment>()
.Local
.FirstOrDefault(f => f.CommantID == comment.CommantID);
if (local != null)
{
db.Entry(local).State = EntityState.Detached;
}
db.Entry(comment).State = EntityState.Modified;
}
استاد خیلی ممنون از جوابتون
من از Generic Repository استفاده می کنم
وقتی کد آپدیت را می خوام تغییر بدم
.FirstOrDefault(f => f.CommantID == comment.CommantID);تو این سطر CommantID را نمی شناسه
public virtual void UpdateComment(TEntity entity)
{
var local = _db.Set<TEntity>()
.Local;
FirstOrDefault(f => f.???== entity.???);
if (local != null)
{
_db.Entry(local).State = EntityState.Detached;
}
_db.Entry(entity).State = EntityState.Modified;
}
از find استفاده کنید و entity رو بهش بدید
تست کنید ببینید جواب میده
نه متاسفانه فقط متد First و FirstOrDefault داره
متد Get را به شکل زیر تغییر دادم درست شد آیا روش اصولی هست؟(AsNoTraching) را اضافه کردم
public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> where = null)
{
IQueryable<TEntity> query = _dbSet.AsNoTracking();
if (where != null)
{
query = query.Where(where);
}
return query.ToList();
}
بله درسته
Track کردن یا دنبال کردن را غیر فعال کردید که در اینجا درست است