【发布时间】:2014-01-26 03:18:01
【问题描述】:
DbSet<TEntity>.Add 方法返回一个实体。我通常会期望 Add 操作具有 void 返回类型。
当我查看EntityFramework source code 时,我看到了以下实现:
public virtual TEntity Add(TEntity entity)
{
Check.NotNull(entity, "entity");
GetInternalSetWithCheck("Add").Add(entity);
return entity;
}
GetInternalSetWithCheck 返回一个InternalSet<TEntity>
有趣的是,InternalSet<TEntity> 的 Add 方法在其签名中有一个 void 返回类型:
public virtual void Add(object entity)
我关心的是,当我对实体进行修改时是否需要小心,以及何时将其添加到 DbSet。
例如有没有这样的情况
var entity = new MyEntity();
_dbSet.Add(entity);
entity.SomeDatModifyingMethod();
_dbContext.SaveChanges();
可能会给出与
不同的行为var entity = new MyEntity();
entity.SomeDatModifyingMethod();
_dbSet.Add(entity);
_dbContext.SaveChanges();
或不同的行为:
var entity = new MyEntity();
entity = _dbSet.Add(entity);
entity.SomeDatModifyingMethod();
_dbContext.SaveChanges();
在基本的默认实现中,这无关紧要,因为它总是返回完全相同的实例。然而,Add 方法是virtual,所以它可以被覆盖(尽管在公共源代码中,唯一的覆盖是一个测试替身——但我不确定源代码实际上是否包含例如 SqlServer 支持实现) .
为什么 DbSet Add 返回一个实体实例而不是 void?
【问题讨论】:
标签: c# entity-framework entity-framework-6