LINQ to Entities Ассоциации внешних ключей - PullRequest
1 голос
/ 27 января 2012

Я новичок в asp.net, C # и sql и мог бы использовать некоторые рекомендации .. Я использую: Мне нужно связать определенную «поездку» с определенной «машиной», но я точно не знаю, как действовать дальше. Я установил свойство навигации между этими двумя объектами, но теперь мне нужно, чтобы транспортное средство содержало ссылку на список поездок. Нужна ли отдельная колонка в транспортном средстве для хранения этого списка поездок? Может ли кто-нибудь показать мне синтаксис для этого?

Вот код, который у меня есть на данный момент, с комментариями в двух местах, мне нужна помощь:

private void setNewRide(Ride newRide, int carNum)
        {
            using (myEntities = new RamRideOpsEntities())
            {
                var assignedCar = (from car in myEntities.Vehicles
                                where (car.CarNum == carNum)
                                select car).FirstOrDefault();

                if (assignedCar != null && newRide != null)
                {                

                    Ride lastRide = assignedCar.Rides.LastOrDefault(); //HERE IS WHERE I NEED TO LOAD THE MOST RECENT 'RIDE' FOR THIS CAR, IS THIS CORRECT???

                    if (lastRide != null)
                    {
                        lastRide.Status = "Completed";
                        assignedCar.numRides = assignedCar.numRides + 1;
                        lastRide.TimeDroppedOff = DateTime.Now;
                        TimeSpan duration = (lastRide.TimeDroppedOff - lastRide.TimeDispatched).Value;

                        lastRide.ServiceTime = duration;
                        if (assignedCar.AvgRideTime == null)
                        {
                            assignedCar.AvgRideTime = duration;
                        }
                        else
                        {
                            assignedCar.AvgRideTime = TimeSpan.FromSeconds(( ((TimeSpan)assignedCar.AvgRideTime).Seconds + duration.Seconds) / assignedCar.numRides);
                        }
                    }

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

                    //HERE IS WHERE I NEED TO ADD THE 'newRide' OBJECT TO THE LIST OF RIDES IN THE 'assignedCar' ..SYNTAX???

                    newRide.TimeDispatched = DateTime.Now;
                    newRide.AssignedCar = carNum;
                    newRide.Status = "EnRoute";

                    myEntities.SaveChanges();
                    SelectCarUP.DataBind();
                    SelectCarUP.Update();                    
                }
            }
        }

EDMX

Ответы [ 2 ]

4 голосов
/ 27 января 2012

Для:

// HERE IS WHERE I NEED TO LOAD THE MOST RECENT 'RIDE' FOR THIS CAR, IS 
// THIS CORRECT???
Ride lastRide = assignedCar.Rides.LastOrDefault();

Использование:

Ride lastRide = assignedCar.Rides
    .OrderByDescending(r => r.TimeDispatched)
    .FirstOrDefault();

... и для:

// HERE IS WHERE I NEED TO ADD THE 'newRide' OBJECT TO THE LIST OF RIDES 
// IN THE 'assignedCar' ..SYNTAX???

... ваша Vehicle сущность имеетRides свойство коллекции уже в соответствии с вашей модельной диаграммой, поэтому вы должны просто сказать:

assignedCar.Rides.Add(newRide);

Наконец - и чисто по личному вкусу - вместо:

var assignedCar = (from car in myEntities.Vehicles
                   where (car.CarNum == carNum)
                   select car).FirstOrDefault();

Я бы использовал:

var assignedCar = myEntities.Vehicles
    .FirstOrDefault(car => car.CarNum == carNum);
1 голос
/ 27 января 2012

По моему мнению, следующие статьи - это хорошее место для начала:

  1. EF 4.1 Code First Walkthrough
  2. Code First Relationships Fluent API.См. Разделы «Блог» и «Запись», где «Блог» имеет отношение один ко многим с сообщениями.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...