DbSet<TEntity>.Add方法返回一个实体.我通常会期待一个Add操作有一个void返回类型.
当我看到EntityFramework source code时,我看到以下实现:@H_403_3@
public virtual TEntity Add(TEntity entity) { Check.NotNull(entity,"entity"); GetInternalSetWithCheck("Add").Add(entity); return entity; }
GetInternalSetWithCheck返回一个InternalSet< TEntity>@H_403_3@
InternalSet的添加方法< TEntity>有趣的是它的签名中有一个void return类型:@H_403_3@
public virtual void Add(object entity)
我关心的是,当我对实体进行修改时,我是否需要小心,与何时将其添加到DbSet中.@H_403_3@
例如.有些情况在哪里@H_403_3@
var entity = new MyEntity(); _dbSet.Add(entity); entity.SomeDatModifyingMethod(); _dbContext.SaveChanges();
可能给出不同的行为@H_403_3@
var entity = new MyEntity(); entity.SomeDatModifyingMethod(); _dbSet.Add(entity); _dbContext.SaveChanges();
或不同的行为:@H_403_3@
var entity = new MyEntity(); entity = _dbSet.Add(entity); entity.SomeDatModifyingMethod(); _dbContext.SaveChanges();
在基本的默认实现中,这并不重要,因为它总是返回完全相同的实例.但是,Add方法是虚拟的,所以它可以被覆盖(尽管在公共源代码中,唯一的覆盖是一个测试双重的 – 但我不知道源代码实际上包括了例如sqlServer支持实现).@H_403_3@
为什么DbSet Add返回实体实例而不是void?@H_403_3@