2012-05-02 55 views
1

我正在使用實體框架4.1(VS 2010,SQL Server 2012)將數據插入數據庫。 首先,我創建一個對象的實例,其值填充屬性和調用ADDOBJECT(),像這樣:使用實體框架獲取標識列值4.1

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(); 
    } 
} 

的事情是,在數據庫中的表中有標識列:

VideoID int IDENTITY(1,1) 

我需要獲取由身份函數插入的值以填充其他對象,並將VideoID作爲外鍵。例如:

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

我唯一能想到的就是在AddObject(videoData)之後查詢最大身份,但是我害怕競爭條件。

我是新來的實體框架,所以我很樂意爲此提供任何指導。

回答

0

如果您有其他需要VideoID作爲FK的對象,只需在VideoData和其他類型之間正確配置導航屬性,EF將爲您處理它。

致電AddObject不會將您的數據插入數據庫,因此您無法在此通話後獲取身份值。只有調用SaveChanges纔會將所有更改推送到數據庫,並且在此調用期間,EF將在內部處理參照完整性(但只有在您的模型正確配置了關係時)纔會處理參照完整性。

在調用SaveChanges之後,如果您正確配置了所有內容,則應該自動填充VideoID

+0

感謝您的快速回答。這確實是一個配置問題。 – Omri374