مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

4017

عضویت از 1393/09/15

استفاده از transaction در EF در حلقه

  • دوشنبه 26 اسفند 1398
  • 22:13
تشکر میکنم

با سلام و احترام

من با استفاده از transaction اطلاعات رو در دیتابیس ذخیره میکنم. چون باید چندتا تیبل رو باهم پر کنم و ID هر تیبل رو به تیبل دیگه بدم از این روش استفاده می کنم. من با ورود تکی داده ها مشکل ندارم. مشکل اینجاست که این کار توی حلقه کار نمیکنه و خطا میده. لطفا راهنمایی بفرمایید.

اینم نمونه کد من

var transaction = db.Database.BeginTransaction();
            try
            {
                for (int i = 0; i < model.GDatesArray.Count; i++)
                {
                    var flightChangePriceInRemain = model.FlightChangePriceInRemain;
                    db.TBL_FlightChangePriceInRemain.Add(flightChangePriceInRemain);
                    db.SaveChanges();

                    var flightDefaultPricing = model.FlightDefaultPricing;
                    db.TBL_FlightDefaultPricing.Add(flightDefaultPricing);
                    db.SaveChanges();

                    var flightProPricing = model.FlightProPricing;
                    db.TBL_FlightProPricing.Add(flightProPricing);
                    db.SaveChanges();

                    var flightEffect = model.FlightEffect;
                    db.TBL_FlightEffect.Add(flightEffect);
                    db.SaveChanges();

                    var flight = model.Flight;
                    flight.ChangePriceInRemainIdRef = flightChangePriceInRemain.ID;
                    flight.DefaultPricingIdRef = flightDefaultPricing.ID;
                    flight.ProPricingIdRef = flightProPricing.ID;
                    flight.FlightEffectIdRef = flightEffect.ID;
                    flight.FlightMiladiDate = DateTime.Parse(model.GDatesArray[i]);
                    flight.FlightShamsiDate = model.JDatesArray[i];
                    db.TBL_Flight.Add(flight);
                    db.SaveChanges();
                }
                
                transaction.Commit();
                return Json(true, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                var error = ex.Message;
                return Json(false, JsonRequestBehavior.AllowGet);
            }

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • سه شنبه 27 اسفند 1398
  • 08:58

سلام

مقدار  db.SaveChanges();  را از داخل حلقه خارج کن.

به هزار وصد دلیل وجود این دستور داخل حلقه اشکال دارد

کاربر سایت

4017

عضویت از 1393/09/15

  • سه شنبه 27 اسفند 1398
  • 11:48

اگه  db.SaveChanges(); رو از حلقه خارج كنم چطوري ID رو بگيرم بدم به جدول آخريه؟

کاربر سایت

رضا نصیری

عضویت از 1392/10/01

  • سه شنبه 27 اسفند 1398
  • 14:06

دوست عزیز اگر شما فقط آیدی جدول ثبت شده رو در یک مرحله ماقبل خودش استفاده میکنید این یعنی اینکه شما بین جداولتون ارتباط (ریلیشن) دارید.

اگر این چنین است این چه طرز کار با ef است؟!!!!!!!!!!!!!!! indecision

کاربر سایت

4017

عضویت از 1393/09/15

  • سه شنبه 27 اسفند 1398
  • 21:19

ممنون از پاسخ شما. بله جداول با ریلیشن به هم ارتباط دارن. میشه یه مثال بزنید که چطور میشه داده ها رو با استفاده از ریلیشن و ترنزکشن ریخت توی چندتا تیبل ؟

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)