Невозможно обновить данные в более чем одной таблице в Asp. net MVC5 - PullRequest
0 голосов
/ 02 апреля 2020

Здесь я могу добавить данные в более чем одну таблицу. Пусть у меня есть 3 таблицы User, Franchise и Fee.

Я не могу обновить данные более чем в одной таблице, исключение:

Нарушение ограничения ссылочной целостности Произошло: значения свойств 'User.Id' на одном конце отношения не совпадают со значениями свойств 'Franchise.UserId' на другом конце.

Код :

public MessageResult SaveAndUpdateFranchisee(UserViewModel model)
        {
            var result = new MessageResult();
            try
            {
                User userData = new User();
                Franchise franchiseData = new Franchise(); 
                var ExistUser = db.Users.Where(a => a.Id == model.Id).FirstOrDefault();
                //Update record
                if (model.Id > 0)
                {
                    Fee feeData = new Fee
                    {
                        FranchiseeFee = model.FranchiseeFee,
                        PaymentTermsFranchiseFee = model.PaymentTermsFranchiseFee,
                        EquipmentCost = model.EquipmentCost,
                        PaymentTermsEquipmentCost = model.PaymentTermsEquipmentCost,
                        OtherFee = model.OtherFee,
                        PaymentTermsOtherFee = model.PaymentTermsOtherFee,
                        ConsumableStock = model.ConsumableStock,
                        PaymentTermsConsumableStock = model.PaymentTermsConsumableStock,
                        FrozenFoodStock = model.FrozenFoodStock,
                        PaymentTermsFrozenFoodStock = model.PaymentTermsFrozenFoodStock,
                        TotalAmountDue = model.TotalAmountDue,
                        TotalAmountPaid = model.TotalAmountPaid,
                        BalanceAmount = model.BalanceAmount,
                        LoyaltyFeePercentage = model.LoyaltyFeePercentage,
                        FixedMonthlyFee = model.FixedMonthlyFee,
                        Note = model.Note,
                        UserId = model.CurrentUserId,
                        LOIDocUrl = model.LOIDocUrl,
                        ModifiedDate = DateTime.Now 
                    };
                    ExistUser.Email = model.Email;
                    //var pwd = SecutiryServices.EncodePasswordToBase64(model.Password);
                    //userData.Password = pwd;
                    ExistUser.Password = model.Password;
                    ExistUser.FirstName = model.FirstName;
                    ExistUser.MiddleName = model.MiddleName;
                    ExistUser.LastName = model.LastName;
                    ExistUser.FullName = model.FullName;                    
                    ExistUser.MobileNo = model.MobileNo;
                    ExistUser.ModifyDate = DateTime.Now;

                    franchiseData.Name = model.FullName;
                    franchiseData.MobileNo = model.MobileNo;
                    franchiseData.AlternateNo = model.AlternetNo;
                    franchiseData.CompanyPhoneNo = model.PhoneNo;

                    franchiseData.Address = model.Address;
                    franchiseData.City = model.City;
                    franchiseData.State = model.State;
                    franchiseData.PinCode = model.PinCode;

                    franchiseData.CompanyName = model.CompanyName;
                    franchiseData.CompanyAddress = model.CompanyAddress;
                    franchiseData.CompanyCity = model.CompanyCity;
                    franchiseData.CompanyState = model.CompanyState;
                    franchiseData.CompanyAddress = model.CompanyAddress;
                    franchiseData.CompanyPinCode = model.CompanyPinCode;
                    franchiseData.ModifiedDate = DateTime.Now;
                    userData.Franchises.Add(franchiseData);
                    foreach (var item in userData.Franchises)
                    {                        
                        item.Fees.Add(feeData);
                    }
                    db.Users.Attach(userData);

                    db.Entry(userData).State = System.Data.Entity.EntityState.Modified;
                    //db.Users.Add(userData);

                    db.SaveChanges();
                    result.Message = "Your franchise has been updated successfully..";
                    result.Status = true;
                }
                //For Insert recored..
                else
                {
                    Fee feeData = new Fee
                    {
                        FranchiseeFee = model.FranchiseeFee,
                        PaymentTermsFranchiseFee = model.PaymentTermsFranchiseFee,
                        EquipmentCost = model.EquipmentCost,
                        PaymentTermsEquipmentCost = model.PaymentTermsEquipmentCost,
                        OtherFee = model.OtherFee,
                        PaymentTermsOtherFee = model.PaymentTermsOtherFee,
                        ConsumableStock = model.ConsumableStock,
                        PaymentTermsConsumableStock = model.PaymentTermsConsumableStock,
                        FrozenFoodStock = model.FrozenFoodStock,
                        PaymentTermsFrozenFoodStock = model.PaymentTermsFrozenFoodStock,
                        TotalAmountDue = model.TotalAmountDue,
                        TotalAmountPaid = model.TotalAmountPaid,
                        BalanceAmount = model.BalanceAmount,
                        LoyaltyFeePercentage = model.LoyaltyFeePercentage,
                        FixedMonthlyFee = model.FixedMonthlyFee,
                        Note = model.Note,
                        UserId = model.CurrentUserId,
                        LOIDocUrl = model.LOIDocUrl,
                        CreatedDate = DateTime.Now
                    };

                    userData.Email = model.Email;
                    //var pwd = SecutiryServices.EncodePasswordToBase64(model.Password);
                    //userData.Password = pwd;
                    userData.Password = model.Password;
                    userData.FirstName = model.FirstName;
                    userData.FullName = model.FirstName + " " + model.LastName;
                    userData.LastName = model.LastName;
                    userData.MobileNo = model.MobileNo;
                    userData.IsActive = true;
                    userData.IsDelete = false;                    
                    userData.CreatedDate = DateTime.Now;
                    userData.UserTypeId = 2;   

                    franchiseData.CompanyId = model.CurrentUserId;
                    franchiseData.Name = userData.FullName;
                    franchiseData.MobileNo = model.MobileNo;
                    franchiseData.AlternateNo = model.AlternetNo;
                    franchiseData.Address = model.Address;
                    franchiseData.City = model.City;
                    franchiseData.State = model.State;
                    franchiseData.PinCode = model.PinCode;
                    franchiseData.CompanyName = model.CompanyName;
                    franchiseData.CompanyPhoneNo = model.PhoneNo;
                    franchiseData.CompanyAddress = model.CompanyAddress;
                    franchiseData.CompanyCity = model.CompanyCity;
                    franchiseData.CompanyState = model.CompanyState;
                    franchiseData.CompanyAddress = model.CompanyAddress;
                    franchiseData.CompanyPinCode = model.CompanyPinCode;
                    franchiseData.CreatedDate = DateTime.Now;
                    franchiseData.IsActive = true;

                    userData.Franchises.Add(franchiseData);
                    foreach (var item in userData.Franchises)
                    {
                        item.Fees.Add(feeData);
                    }
                    db.Users.Add(userData);
                    db.SaveChanges();
                    //db.AddUserRole(userData.Id, 4);                  
                    result.Message = "Your franchisee has been created successfully..";
                    result.Status = true;
                }
                return result;
            }
            catch (Exception ex)
            {
                result.Message = "We are unable to process your request at this time. Please try again later.";
                result.Status = false;
                return result;
            }
        }

1 Ответ

0 голосов
/ 02 апреля 2020

Сообщение об ошибке просто: ваш код создает новый объект Franchise, но никогда не устанавливает свойство franchiseData.UserId.

Добавьте его в свой franchiseData код населения перед вызовом db.SaveChanges() :

franchiseData.UserId = model.CurrentUserId;

Кстати, вы должны добавить код, подтверждающий, что у текущего пользователя есть разрешение на установку ссылочных свойств внешнего ключа (например, UserId) непосредственно из значений, считанных из отправленных форм, потому что в противном случае любой пользователь может ввести Id значения, принадлежащие другим пользователям и получающие доступ к информации, к которой они не должны иметь доступ или каким-либо иным образом изменяют вашу базу данных.

...