Блокировка таблицы БД после запуска программы - PullRequest
0 голосов
/ 31 августа 2018

Мне нужно вставить данные в таблицу TBL_LOAN_DETAILS. при вызове метода LoanDetails() эти данные необходимо вставить в таблицу, In TBL_LOAN_DETAILS ID автоматически увеличивается. После вставки данных в TBL_LOAN_DETAILS мне нужно взять эту запись ID, чтобы передать в качестве праметра другой метод, называемый CribProcess() в LoanDetails(). В этом после некоторого вычисления / логики снова мне нужно обновить столбец TBL_LOAN_DETAILS. чтобы добиться этого я использовал следующий код. (Я не могу вставить полный код здесь, потому что stackoverflow заблокировал его, поэтому я использую pastebin). Я поставил точку торможения на эту линию lAEntities.TBL_LOAN_DETAILS.Add(tBlLoanDetails); программа не работает после этой линии. lAEntities.SaveChanges();

Часть моего кода: пожалуйста, проверьте мой полный код, используя ссылку.

public LoanDetailEntityResponse LoanDetails(string custId, string facilityType, string applyedDate, string currency,string RequiredLoanAmount,string RepaymentPeriod,
                                            string NIC,string CustName,string DateofBirth, string CommunicationAddress,string MobileNumber,string LoanPurpose,string Occupation,string NetIncome,string Expenses,string Education_qualification,
                                            string TypeOfEmployment,string GE_Emp_Category,string Emp_Period,string GE_Position,string PE_Existence, string PE_Position,string SE_Experience,string SE_Business_Nature, string ValueOfAssets,
                                            string SE_Bus_RegNoo_Availability, string SE_Maintain_Financial_Recode, List<LandPropertyAsset> AssetLandList, List<VehicleAsset> AssetVehicleList)
{

    var refNo = string.Empty;
    var response = new LoanDetailEntityResponse();

        var lAEntities = new LAEntities();
        DateTime appDate;
        DateTime DOB;
        using (var transaction = lAEntities.Database.BeginTransaction())
        {
                if (DateTime.TryParse(applyedDate, out appDate))
                 {
                    applyedDate = appDate.ToShortDateString();
                    if (DateTime.TryParse(DateofBirth, out DOB))
                    {
                        DateofBirth = DOB.ToShortDateString();

                         refNo = Common.GetSerialSequence("LOANREFERENCENO", transaction);

                        string approvalStatus = "";
                        int approvalId = 1;
                        decimal loanId = 0;

                        var tBlLoanDetails = new TBL_LOAN_DETAILS
                        {
                            CUSTID = custId,
                            REFNO = refNo,
                            FACILITY_TYPE = facilityType,
                            APPLIED_DATE = applyedDate,
                            CURRENCY = currency,
                            REQLOANAMOUNT = Convert.ToDecimal(RequiredLoanAmount),
                            REPAYMENTPERIOD = RepaymentPeriod,
                            NIC = NIC,
                            CUSTNAME = CustName,
                            DATEOFBIRTH = DateofBirth,
                            COMMUNICATIONADDRESS = CommunicationAddress,
                            MOBILENUMBER = MobileNumber,
                            PURPOSEOFLOAN = LoanPurpose,
                            OCCUPATION = Occupation,
                            NETINCOME = Convert.ToDecimal(NetIncome),
                            EXPENSES = Convert.ToDecimal(Expenses),
                            EDUCATION_QUALIFICATION = Education_qualification,
                            TYPEOFEMPLOYMENT = TypeOfEmployment,
                            GE_EMP_CATEGORY = Convert.ToInt32(GE_Emp_Category),
                            EMP_PERIOD = Convert.ToInt32(Emp_Period),
                            GE_POSITION = Convert.ToInt32(GE_Position),
                            PE_EXISTENCE = Convert.ToInt32(PE_Existence),
                            PE_POSITION = Convert.ToInt32(PE_Position),
                            SE_EXPERIENCE = Convert.ToInt32(SE_Experience),
                            SE_BUS_NATURE = Convert.ToInt32(SE_Business_Nature),
                            SE_BUS_REGNNO_AVAILABILITY = SE_Bus_RegNoo_Availability,
                            SE_MAINTAAIN_FINANTIAL_RECORD = SE_Maintain_Financial_Recode,
                            EMP_VALUEOFASSETS = Convert.ToInt32(ValueOfAssets),
                            LOAN_STATUS_ID = approvalId,
                            REPAYMENTSCORE = 0,
                            PROPOSED_LOAN_FACI_INSTA = 0,
                            EXSISTING_LOAN_FACI_INSTA = 0,
                            ODINTEREST = 0,
                            CREDITCARD = 0,
                            SURPLUS = 0,
                            LOAN_STATUS_DES = "",
                            ISACTIVE = 1,
                            CREATEDBY = "System",
                            CREATEDDATETIME = DateTime.Now,
                            MODIFIEDBY = "System",
                            MODIFIEDDATETIME = DateTime.Now
                        };
                        lAEntities.TBL_LOAN_DETAILS.Add(tBlLoanDetails);
                        lAEntities.SaveChanges();
                        //transaction.Commit();                         

                        var loanDetail = lAEntities.TBL_LOAN_DETAILS.FirstOrDefault(x => x.REFNO.Equals(refNo) && x.ISACTIVE == 1);
                        if (loanDetail != null)
                        {
                            loanId = loanDetail.ID;


                            // Call Crib process
                            AppSettingsReader configReader = new AppSettingsReader();
                            var chromeDriverUrl = (string)configReader.GetValue("ChromeDriverUrl", typeof(string));
                            var navigateUrl = (string)configReader.GetValue("CRIBNavigateUrl", typeof(string));
                            var userName = "";
                            var password = "";
                            CribAutoProcess ca = new CribAutoProcess();
                            int facilityID = int.Parse(loanId.ToString());
                            ca.CribProcess(navigateUrl, userName, password, facilityID, CustName, NIC, "Testing");

                        }
                        }
                }
        }
}

Полный код здесь

после запуска программы, TBL_LOAN_DETAILS таблица получает блокировку, что означает, что когда я пытаюсь удалить таблицу с помощью oracle sql developer, появляется это сообщение об ошибке oracle.

ORA-00054: ресурс занят и получен с указанным значением NOWAIT или тайм-аутом истек

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку вы используете транзакции, вам необходимо выполнить COMMIT или ROLLBACK. Если вы этого не сделаете, ошибка, с которой вы столкнулись в данный момент, произойдет, потому что транзакция все еще использует запись, независимо от того, использовали ли вы ключевое слово * 1003 и оно было удалено.

То, что вы можете сделать, чтобы снять блокировку, это перезапустить службу, выполняющую oracle, или завершить процесс в oracle, удерживающем блокировку. После этого oracle выполнит свой собственный процесс ROLLBACK, и блокировка исчезнет.

...