LINQ to Entities外键关联

时间:2012-01-26 20:52:26

标签: c# asp.net sql linq-to-entities foreign-keys

我是asp.net,C#和sql的新手,可以使用一些指导..我正在使用:下面:db与linq-to-entities框架。我需要将特定的“骑行”与特定的“车辆”相关联,但我不确定如何继续。我在两个对象之间设置了导航属性,但现在需要让车辆保持对其所乘坐的列表的引用。我是否需要在车辆中使用单独的列来保存此列表?有人可以告诉我完成此操作的语法吗?

以下是我目前的代码,在需要帮助的两个地方发表评论:

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 个答案:

答案 0 :(得分:4)

有关:

// 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 :(得分:1)

在我看来,以下文章是开始的好地方:

  1. EF 4.1 Code First Walkthrough
  2. Code First Relationships Fluent API。请参阅博客和发布实体,其中博客具有一对多 关系与帖子。