نمایش نتایج 1 تا 14 از 14

نام تاپیک: جلوگیری از ورود داده تکراری هنگام ویرایش

  1. #1

    جلوگیری از ورود داده تکراری هنگام ویرایش

    سلام دوستان.
    بهترین روش واسه اینکه موقع ویرایش چک کنیم که داده ی ویرایش شده تکراری نباشه چیه ؟
    البته با Entity Framework
    موقع ثبت راحت میشه چک کرد . موقع ویرایش چطور ؟
    من تو جدولم 4 تا فیلد دارم آی دی(کلید اصلی) - کد - نام - نام خانوادگی اینجوری پر شده :

    کد---------------------نام -----------------------نام خانوادگی

    1----------------------علی ----------------------عالی


    2--------------------حسن ---------------------صالحی


    دو حالت داره:

    اول:
    کاربر کد رو ویرایش نمیکنه و فقط نام یا نام خانوادگی رو ویرایش میکنه
    (اینجا رو چه کنم ؟)
    دوم:
    کاربر در رکورد دوم کد رو هم ویرایش میکنه و به جای 2 مینویسه 1
    (اینجا رو چه کنم ؟)
    این اکشن Create من هست و مشکل ندارم موقع ثبت باهاش


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "PersonId,PersonCode,PersonName,PersonFamily")] People people)
    {
    if (ModelState.IsValid)
    {
    if (!db.People.Any(c=>c.PersonCode==people.PersonCode .Trim().ToLower()))
    {
    db.People.Add(people);
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    else
    {
    ModelState.AddModelError("PersonCode", "کد وارد شده تکراری می باشد");
    }

    }


    return View(people);
    }


    ولی اینجا تو ادیت چه کدی باس بنویسم واسه چک کردن ؟


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "PersonId,PersonCode,PersonName,PersonFamily")] People people)
    {
    if (ModelState.IsValid)
    {
    db.Entry(people).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    return View(people);
    }

  2. #2

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    دوستان راهکاری ندارن ؟

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1394
    پست
    38

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    از db.addorupdate()

  4. #4

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    نقل قول نوشته شده توسط asiatec مشاهده تاپیک
    از db.addorupdate()
    میشه یه توضیح بدید ؟

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1394
    پست
    38

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    به جای استفاده از

     db.Entry(people).State = EntityState.Modified;
    db.Add(people);



    از

    db.AddOrUpdate(people)


    استفاده کنید

  6. #6

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    نقل قول نوشته شده توسط asiatec مشاهده تاپیک
    به جای استفاده از

     db.Entry(people).State = EntityState.Modified;
    db.Add(people);



    از

    db.AddOrUpdate(people)


    استفاده کنید
    راهکارش چیه واسه اینکه تشخیص بده یک رکورد نباس تکراری باشه یا اگه تکراری هست اعلام کنه ؟ من دقیق متوجه نمیشم

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1394
    پست
    38

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    اعلامی صورت نمیگیره اگر تکراری باشه اپدیت میشه نباشه رکورد جدید دخیره میشه

  8. #8

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    راه دیگه ای وجود نداره ؟
    تویه ADO خیلی راحت بود . کد رو توی یه متغیر نگه میداشتم . موقع ویرایش میومدم و چک میکردم که آیا کد با اون متغیر یکی هست یا نه.
    اگه مساوی بود که کوئری نمیزدم به دیتابیس. اما اگه فرق میکرد کوئری میزدم و چک میکردم که آیا وجود داره این کد و ارور رو نشون میدادم
    این رو چطور میتونم پیاده سازی کنم ؟

  9. #9
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    سسیستم EF از Change Tracking یا سیستم ردیابی استفاده میکنه و تشخیص میده رکورد در چه وضعیتی قرار داره
    آیا جدید هست یا قبلا بوده
    شما کافیه یک جستجو بزنید بدینصورت


    if (ModelState.IsValid) {
    var first=db.people.FirstOrDefault(x=> x.PersonID==PersonId);
    ;
    if(first!=null)
    {
    db.Entry(people).State = EntityState.Modified;
    db.Attach(first);
    db.SaveChanges();
    return RedirectToAction("Index");

    }
    }
    return View(people);


  10. #10

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    من اکشن رو به اینصورت تغییر دادم .


    public ActionResult Edit([Bind(Include = "PersonId,PersonCode,PersonName,PersonFamily")] People people)
    {
    if (ModelState.IsValid)
    {
    var person = db.People.Find(people.PersonId);
    if (person.PersonCode==people.PersonCode)
    {
    db.Entry(people).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    else
    {
    var personCode = db.People.SingleOrDefault(c => c.PersonCode == people.PersonCode);
    if (personCode!=null)
    {
    ModelState.AddModelError("PersonCode", "کد وارد شده تکراری می باشد");
    }
    else
    {
    db.Entry(people).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    }
    }
    return View(people);
    }


    ولی موقع ویرایش ارور میده

    System.InvalidOperationException: 'Attaching an entity of type 'DataLayer.People' 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.


  11. #11

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    این کد رو نوشتم و درست جواب میده .
    به نظر شما بعدا دچار مشکل نمیشم با این کد ؟ یا اصلا کد ایرادی نداره ؟


    public ActionResult Edit([Bind(Include = "PersonId,PersonCode,PersonName,PersonFamily")] People people)
    {
    if (ModelState.IsValid)
    {
    var person = db.People.Find(people.PersonId);
    if (person.PersonCode==people.PersonCode)
    {
    if (person!=null)
    {
    db.Entry(person).State = EntityState.Detached;
    }
    db.Entry(people).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    else
    {
    var personCode = db.People.SingleOrDefault(c => c.PersonCode == people.PersonCode);
    if (personCode!=null)
    {
    db.Entry(person).State = EntityState.Detached;
    db.Entry(personCode).State = EntityState.Detached;
    ModelState.AddModelError("PersonCode", "کد وارد شده تکراری می باشد");
    }
    else
    {
    db.Entry(person).State = EntityState.Detached;
    db.Entry(people).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    }
    }
    return View(people);
    }

  12. #12
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    کد قسمت else نیاز نیست فقط یک redirect کافیه
    بدینصورت عمل کنید

    if (ModelState.IsValid)
    {
    var person = db.People.Find(people.PersonId);
    if (person != null)
    {
    if (person.PersonCode == people.PersonCode)
    {
    ModelState.AddModelError("PersonCode", "کد وارد شده تکراری می باشد");
    }
    else
    {
    // db.Entry(person).State = EntityState.Detached;
    person.PersonId = people.PersonId;
    person.PersonCode = people.PersonCode;
    person.PersonName = people.PersonName;
    person.PersonFamily = people.PersonFamily;
    db.Attach(person);
    db.Entry(person).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    }
    }

    return View(people);

    میتونید از Automapper هم برای map شدن بهره ببرید

  13. #13

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    متاسفانه کدی که شما فرمودید جواب نمیده.
    چون کاربر امکان داره کد پرسنلی رو تغییر نده و کد شما اجازه نمیده.مثلا کاربر میخواد نام رو عوض کنه ولی کد شما ارور میده چون میگه PersonCode تکراریه

  14. #14
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: جلوگیری از ورود داده تکراری هنگام ویرایش

    خب میتونید تمام فیلدها بجر PersonCode را به روزرسانی کنید


    if (ModelState.IsValid)
    {
    var person = db.People.Find(people.PersonId);
    var error = "";
    if (person != null)
    {
    person.PersonId = people.PersonId;
    person.PersonName = people.PersonName;
    person.PersonFamily = people.PersonFamily;
    if (person.PersonCode != people.PersonCode)
    {
    person.PersonCode = people.PersonCode;

    }
    else
    {
    // ModelState.AddModelError("PersonCode", "کد وارد شده تکراری می باشد");
    error = "کد وارد شده تکراری می باشد";
    }
    db.Attach(person);
    db.Entry(person).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    }

    return View(people);

تاپیک های مشابه

  1. پاسخ: 11
    آخرین پست: چهارشنبه 08 مهر 1394, 12:37 عصر
  2. پاسخ: 2
    آخرین پست: پنج شنبه 22 آبان 1393, 17:34 عصر
  3. پاسخ: 3
    آخرین پست: دوشنبه 02 دی 1392, 00:10 صبح
  4. پاسخ: 1
    آخرین پست: پنج شنبه 12 بهمن 1391, 11:21 صبح
  5. چی کار کنیم کامپیوتر ویروسی نشه؟ و آیا آنتی ویروس براتون نصبه؟
    نوشته شده توسط حمید محمودی در بخش گفتگوی عمومی کامپیوتر و فناوری اطلاعات
    پاسخ: 17
    آخرین پست: سه شنبه 18 خرداد 1389, 09:47 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •