1

データベースにデータを挿入するために、エンティティフレームワーク4.1(VS 2010、SQL Server 2012)を使用しています。まず、オブジェクトのインスタンスを作成し、プロパティに値を入力して、次のようにAddObject()を呼び出します。

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を外部キーとして持つ追加のオブジェクトを埋めるために、ID関数によって挿入された値を取得する必要があります。例えば:

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

私が考えることができた唯一のことは、AddObject(videoData)の直後に最大IDを照会することでしたが、競合状態が怖いです。

私はEntityFrameworkを初めて使用するので、これに関するガイダンスをいただければ幸いです。

4

1 に答える 1

0

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

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

呼び出した後、すべてが正しく構成されている場合は、が自動的に入力されますSaveChangesVideoID

于 2012-05-02T12:27:00.717 に答える