使用实体框架4.1获取标识列值

时间:2012-05-02 12:01:00

标签: entity-framework-4.1 identity-column

我正在使用实体框架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();
   }
}

问题是,数据库中的表有一个标识列:

VideoID int IDENTITY(1,1)

我需要获取身份函数插入的值,以便填充其他对象,将VideoID作为外键。例如:

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

我唯一能想到的是在AddObject(videoData)之后立即查询最大身份,但我害怕竞争条件。

我是Entity Framework的新手,所以我很乐意为此提供任何指导。

1 个答案:

答案 0 :(得分:0)

如果您有其他需要VideoID作为FK的对象,您只需在VideoData和其他类型之间正确配置导航属性,EF就会为您处理。

调用AddObject不会将数据插入数据库,因此在此调用后无法获取标识值。只有调用SaveChanges才会将所有更改推送到数据库,在此调用期间,EF将在内部处理参照完整性(但前提是您的模型已正确配置了关系)。

致电SaveChanges后,如果您已正确配置所有内容,则应自动填充VideoID