2012-01-26 54 views
1

我是新来的asp.net,C#和SQL,可以使用一些指导..我使用:下面:数据库与linq实体框架。我需要将特定的“乘车”与特定的“车辆”相关联,但我不确定如何继续。我已经在两个物体之间设置了导航属性,但是现在需要让车辆持有对其所乘坐的列表的引用。我需要一个单独的车辆列来保存这个列表吗?有人可以告诉我完成这个的语法吗?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

除非EF做事情聪明我没有意识到,你所说的问题依赖于SQL Server中不存在的神秘的自然排序(至少以最相信的形式)。这些Rides的顺序是基于页面Sql服务器插入记录的,如果您知道页面上剩余的空间并插入行的确切大小,则该记录只有确定性。这不太可能,所以使用'OrderBy'子句。回到原来的问题,您评论的代码行有什么问题?例外?没有返回? – Smudge202

回答

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); 
+0

你们都摇滚,谢谢!还有一个问题:回应评论:上面:关于不确定的排序...当我使用'assignedCar.Rides.Add(newRide)'时,确实是这种情况,'游乐设施'不会保持在顺序添加,因为他们会在数组中?无论如何,我会使用orderby子句,但仅仅是为了学习... – SHeinema

+0

啊,看起来我仍然有一个问题...当使用'assignedCar.Rides.Add(newRide)语句时,我得到以下异常:“两个对象之间的关系无法定义,因为它们连接到不同的ObjectContext对象。”有什么想法吗? – SHeinema

+0

罢工,想通了。谢谢。 – SHeinema