2012-05-02 11 views
1

私はデータベースにデータを挿入するためにエンティティフレームワーク4.1(VS 2010、SQL Server 2012)を使用しています。 まず私はこのように、値を持つプロパティを記入し、()AddObjectメソッドを呼び出して、オブジェクトのインスタンスを作成します。エンティティフレームワーク4.1を使用してID列の値を取得

VideoData videodata = new VideoData(); 
videodata.StartCaptureTime = startCaptureTime; 
videodata.EndCaptureTime = endCaptureTime; 
videodata.CameraID = CameraID; 

using (var context = new PercEntities()) 
{    
    if (context.VideoDatas.Where(c => c.VideoID == videoID).Count() == 0) 
    { 
     var videoData = new VideoData 
     { 
      StartCaptureTime = startCaptureTime, 
      EndCaptureTime = endCaptureTime, 
      CameraID = CameraID, 
     }; 
    context.VideoDatas.AddObject(videoData); 
    context.SaveChanges(); 
    } 
} 

事は、データベース内のテーブルには、ID列を持っていることを、次のとおりです。

VideoID int IDENTITY(1,1) 

と私は、外部キーとしてVideoIDを持つ追加のオブジェクトを埋めるために、アイデンティティ関数によって挿入された値を取得する必要があります。例えば:私は考えることができ

FrameData frameData = new FrameData(); 
frameData.VideoID = videodata.VideoID; 
frameData.Path = path; 

唯一のものは、右のAddObjectメソッド(ビデオデータ)の後に最大身元を照会することでしたが、私は、レース条件が怖いです。

私はEntity Frameworkを使い慣れていないので、これについてのガイダンスは喜んでいただきたいと思います。

答えて

0

FKとしてVideoIDが必要な他のオブジェクトがある場合は、VideoDataのナビゲーションプロパティを正しく設定するだけで、EFがそれを処理します。

AddObjectに電話をかけてもデータがデータベースに挿入されないため、この呼び出し後にID値を取得できません。 SaveChangesへの呼び出しのみがすべての変更をデータベースにプッシュし、この呼び出しの間、EFは参照整合性を内部的に処理します(ただし、リレーションを使用してモデルを正しく構成した場合のみ)。

VideoIDを正しく設定した場合、VideoIDには自動的に値が設定されます。SaveChangesを呼び出すと、自動的に値が設定されます。

+0

クイックアンサーに感謝します。それは本当に設定上の問題でした。 – Omri374

関連する問題