Исключение ограничения FOREIGN_KEY - PullRequest
1 голос
/ 01 февраля 2012

У меня есть приложение asp.net с ac # code-behind, подключенным к базе данных SQL с linq-to-entity ... Когда я пытаюсь «SaveChanges ()» в следующем коде, я получаю исключение (в списке ниже). Есть мысли о том, что случилось?

private void setNewRide(long newRideID, int carNum)
        {
            handleCompletedRide(carNum);

            using (myEntities = new RamRideOpsEntities())
            {
                Vehicle assignedCar = myEntities.Vehicles.FirstOrDefault(car => car.CarNum == carNum);
                Ride newRide = myEntities.Rides.FirstOrDefault(ride => ride.identity == newRideID);

                if (assignedCar != null && newRide != null)
                {
                    vs_CurrentRideId = newRide.identity; //Save current ride to ViewState
                    vs_CarStatus = assignedCar.Status; //Save old status to ViewState

                    assignedCar.Status = "EnRoute";
                    assignedCar.CurrPassengers = newRide.NumPatrons;
                    assignedCar.StartAdd = newRide.PickupAddress;
                    assignedCar.EndAdd = newRide.DropoffAddress;
                    assignedCar.CurrentAdd = newRide.DropoffAddress;

                    assignedCar.Rides.Add(newRide);

                    newRide.TimeDispatched = DateTime.Now;
                    newRide.WaitTime = (((DateTime)newRide.TimeDispatched) - ((DateTime)newRide.TimeOfCall));
                    newRide.AssignedCar = carNum;
                    newRide.Status = "EnRoute";

                    myEntities.SaveChanges(); //EXCEPTION HERE!
                    SelectCarUP.DataBind();
                    SelectCarUP.Update();                    
                }
            }
        }

ИСКЛЮЧЕНИЕ:

Оператор UPDATE конфликтовал с ограничением FOREIGN KEY \ "FK_Rides_Vehicles \". Конфликт произошел в базе данных \ "CWIS29RamRideOps \", таблица \ "dbo.Vehicles \", столбец «Идентичность». \ R \ nОпределение прекращено.

БД:

enter image description here

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Эта строка:

assignedCar.Rides.Add(newRide);

переводится как SQL-INSERT - пока у вас уже есть запись с тем же идентификатором.Решите, что вы хотите сделать: вставьте новую поездку (в этом случае вы должны NULLify идентификатор newRide) или обновите ее (в этом случае вы должны просто закомментировать эту строку; изменения будут сохранены).

0 голосов
/ 01 февраля 2012

Измените свой код следующим образом:

newRide.TimeDispatched = DateTime.Now;
newRide.WaitTime = (((DateTime)newRide.TimeDispatched) - ((DateTime)newRide.TimeOfCall));
newRide.AssignedCar = carNum;
newRide.Status = "EnRoute";

assignedCar.Status = "EnRoute";
assignedCar.CurrPassengers = newRide.NumPatrons;
assignedCar.StartAdd = newRide.PickupAddress;
assignedCar.EndAdd = newRide.DropoffAddress;
assignedCar.CurrentAdd = newRide.DropoffAddress;
assignedCar.Rides = newRide; // Your First Change here

myEntities.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...