简体   繁体   中英

FOREIGN_KEY constraint exception

I have an asp.net application with ac# code-behind, connected to an SQL db with linq-to-entities... When I attempt to 'SaveChanges()' on the following code I get an exception (listed below). Any thoughts on what is up?

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();                    
                }
            }
        }

THE EXCEPTION:

The UPDATE statement conflicted with the FOREIGN KEY constraint \\"FK_Rides_Vehicles\\". The conflict occurred in database \\"CWIS29RamRideOps\\", table \\"dbo.Vehicles\\", column 'Identity'.\\r\\nThe statement has been terminated.

THE DB:

在此处输入图片说明

This line:

assignedCar.Rides.Add(newRide);

is translated as SQL-INSERT - while you already have a record with the same ID. Decide what you want to do: insert a new ride (in which case you should NULLify the id of newRide), or update it (in which case you should just comment that line out; changes will be saved).

Change your code like this:

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM