嘲笑或伪造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
。