• 1397/08/27

استفاده همزمان Get , Update در یک Using :

درود و سپاس فراوان از آموزش هاتون

مشکلی که دارم اینه که زمانی که می خوام تو یک واحد 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();
{

خطایی هک که میده تو عکس گذاشتم

  • 1397/08/27
  • ساعت 10:25

کد آپدیست را به شکل زیر تغییر دهید 

  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;
        }

 


  • 1397/08/28
  • ساعت 07:53

استاد خیلی ممنون از جوابتون

من از 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;
        }

 


  • 1397/08/28
  • ساعت 08:54

از find استفاده کنید و entity رو بهش بدید 

تست کنید ببینید جواب میده 


  • 1397/08/28
  • ساعت 09:43

نه متاسفانه فقط متد First و FirstOrDefault داره


  • 1397/08/28
  • ساعت 10:02

متد 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();

        }

 


  • 1397/08/28
  • ساعت 13:04

بله درسته 

Track کردن یا دنبال کردن را غیر فعال  کردید که در اینجا درست است 


logo-enamadlogo-samandehi