嘲笑或伪造DbEntityEntry或创build一个新的DbEntityEntry

继我的另一个关于嘲笑DbContext的问题之后。我还有一个关于嘲笑EF Code First的问题。

我现在有一个我的更新的方法如下所示:

if (entity == null) throw new ArgumentNullException("entity"); Context.GetIDbSet<T>().Attach(entity); Context.Entry(entity).State = EntityState.Modified; Context.CommitChanges(); return entity; 

上下文是我自己的DbContext的一个接口。

我正在跑的问题是,我该如何处理

Context.Entry(entity).State

我已经介绍了这个代码,当我有一个真正的DbContext作为我的Context接口的实现时,它就起作用了。 但是当我把虚假的背景放在那里时,我不知道如何处理它。

DbEntityEntry类没有构造函数,所以我不能只在我的假上下文中创build一个新的构造函数。

有没有人在CodeFirst解决scheme中嘲笑或伪造DbEntityEntry?

还是有更好的方法来处理状态变化?

就像其他情况一样,你需要添加一个额外的间接级别:

 interface ISalesContext { IDbSet<T> GetIDbSet<T>(); void SetModified(object entity) } class SalesContext : DbContext, ISalesContext { public IDbSet<T> GetIDbSet<T>() { return Set<T>(); } public void SetModified(object entity) { Entry(entity).State = EntityState.Modified; } } 

所以,不要调用实现,而是调用SetModified