• 1397/08/20

خطا هنگام آپدیت کردن :

با سلام

میخواهم اول در جدول جستجو کنم اگر نبود insert بشه و الا آپدیت بشه.

من این کد را مینویسم خطا میده. لطفا راهنمایی کنید.


                            int payCode = db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).Select(s => s.PAYMENT_SERIAL).Count();
                            if (payCode == 0)
                            {

                                db.PAYMENTRepository.Insert(pay);
                            }
                            else
                            {
                                int payCode1 = db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).Select(s => s.PAYMENT_SERIAL).First();
                                pay.PAYMENT_SERIAL = payCode1;
                                db.PAYMENTRepository.Update(pay);
                                
                            }

متن خطا:

Additional information: Attaching an entity of type 'Resturant.DataLayer.PAYMENT' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.

  • 1397/08/20
  • ساعت 17:56

سلام 

ابتدا Any بزیند داخل if و بعد از دستور ثبت استفاده کنید 


  • 1397/08/26
  • ساعت 10:48
  if (!(db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).Any()))
                            {

                                db.PAYMENTRepository.Insert(pay);
                            }
                            else
                            {
                                var payCode = db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).First();
                                pay.PAYMENT_SERIAL = payCode.PAYMENT_SERIAL;
                                db.PAYMENTRepository.Update(pay);
                                db.Save();
                            }

سلام من این کد رو نوشتم اما باز خطا میده!!! میشه بیشتر راهنمایی کنید.


  • 1397/08/26
  • ساعت 18:34

متن خطا ؟ 


  • 1397/08/27
  • ساعت 08:05

An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll

Additional information: Attaching an entity of type 'Resturant.DataLayer.PAYMENT' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.


  • 1397/08/27
  • ساعت 09:11

به کلیدی اصلی جدول مشکل خورده 

متد Update رو به شکل زیر تغییر دهید 

     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/09/25
  • ساعت 15:13

ببخشید استاد اگر من میخوام توی ریپوزیتوری این رو بنویسم این کد رو نوشتم اما شرطش رو یاد ندارم.

 public virtual void UpdateComment(TEntity entity)
        {
            var local = _db.Set<TEntity>()
                .Local
                .FirstOrDefault(f => f => f.CommantID == comment.CommantID);
            if (local != null)
            {
                _db.Entry(local).State = EntityState.Detached;
            }

            _db.Entry(entity).State = EntityState.Modified;
        }

این رو چطوری باید تغییر بدم؟

f => f.CommantID == comment.CommantID

 


  • 1397/09/25
  • ساعت 15:46

باید entity را به جای comment قرار دهید 

و از Find استفاده کنید تا خود ibject را جستجو کند 


logo-samandehi