2012-01-26 9 views
1

私はasp.net、C#、SQLの新機能で、いくつかのガイダンスを使用することができます。linq-to-entitiesフレームワークで以下を使用しています。特定の「乗り物」を特定の「乗り物」に関連付ける必要がありますが、進める方法が正確にわかりません。私は2つのオブジェクトの間にナビゲーションプロパティを設定しましたが、現在は乗り物のリストへの参照を保持する必要があります。この乗り物のリストを保持するには、車両に別の列が必要ですか?誰か私にこれを達成するための構文を教えてもらえますか?ここでLINQ to Entities外部キーの関連

は、私が現在持っているコードは、私は助けを必要とする2つのスポットでのコメントで、次のとおりです。私の意見では

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内に存在しない(少なくとも最も信じられている形式で)神話的な自然順序に依存しているということです。これらの乗り物の順序は、ページ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

あなた、すべての岩、ありがとう!ちょうどもう1つの質問..コメントに応答して:上:不確定発注について...私が 'assignedCar.Rides.Add(newRide)'を使用すると、確かに「乗り物」が注文に残らないケースです彼らは配列のように追加されましたか?とにかくorderby句を使用しますが、学習のためだけに... – SHeinema

+0

ああ、まだ1つの問題があるようです... 'assignedCar.Rides.Add(newRide)文を使用すると、次のようになります例外: "2つのオブジェクトの関係は、異なるObjectContextオブジェクトにアタッチされているため、定義できません。"何かご意見は? – SHeinema

+0

ストライクは、それを考え出した。ありがとう。 – SHeinema

関連する問題