2011-05-17 54 views
10

我加入了一个实体到我的数据库,像这样前:标识的SaveChanges()

public TEntity Add(TEntity entity) 
{ 
    return (TEntity)_database.Set<TEntity>().Add(entity); 
} 

然而,DbSet.Add方法没有返回与标识等新加入的实体,它是只需将我传入的对象返回到我的Add方法。

是否应该让我回到完整的新实体,包括Id,或者在调用SaveChanges()之前无法获得Id

回答

17

Add()所做的所有调用正在有效地将其注册到数据上下文,以便可以跟踪该实体。目前没有针对数据库进行实际操作,直到(正如您正确提到的),您致电SaveChanges()

我假设你在表中使用自动生成的ID;在这种情况下,它是在插入记录时将生成该Id的数据库引擎,Entity Framework会将其读回并为您填充实体。

因此,要确认您的怀疑,请不要在此情况下调用SaveChanges()之前无法获得Id。

希望这会有所帮助!

+0

欢呼,我认为一定是这样,讨厌我目前的问题,但它是有道理的 – jcvandan 2011-05-17 11:03:50

+1

如果你能够切换主键类型,你可以使用GUID并生成你的.net代码,然后发送到数据库。 – 2013-08-30 18:56:35