实体框架如何插入新值?

时间:2010-11-07 12:26:53

标签: c# linq entity-framework

我还有另一个与此相关的问题,但出于清晰的原因,我想将它们分开。

我偶然发现了一个问题,我无法在表中插入新行,因为它只有一列,并且该列逐渐增加并且PK。

但是,在Entity Framework中创建该Set的新对象完全没有问题。

 var admin = new Administrator {};
context.Administrator.AddObject(admin);
context.SaveChanges();
int adminId = admin.adminId; //This would give me the new value

这是如何运作的?

1 个答案:

答案 0 :(得分:4)

当您提交更改时,Entity Framework会为每个添加的实体执行与管理员实体集关联的表中的INSERT。 由于PK在数据库中自动递增,因此EF知道它不需要提供它,而是在INSERT之后进行检索。然后它更新管理员实体,它现在可用(和数据库生成)PK。

这是经典的对象关系映射工作,我希望我理解你的问题?

以下是EF发送的用于执行插入作业的确切SQL查询。

insert [dbo].[Entities] default values
select [Id]
  from [dbo].[Entities]
  where @@ROWCOUNT > 0 and [Id] = scope_identity()

它在表格中插入一个默认行,然后选择新行的Id。