Mocking or faking DbEntityEntry or creating a new DbEntityEntry
ef-code-first, entity-framework
Solution
Just like the other case, what you need is to add an additional level of indirection:
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;
}
}
So, instead of calling the implementation, you just call `SetModified`.
Problem
Following on the heels of my other question about mocking DbContext.Set I've got another question about mocking EF Code First. I now have a method for my update that looks like: ``` if (entity == null) throw new ArgumentNullException("entity"); Context.GetIDbSet<T>().Attach(entity); Context.Entry(entity).State = EntityState.Modified; Context.CommitChanges(); return entity; ``` Context is an interface of my own DbContext. The problem I'm running in to is, how do I handle the `Context.Entry(entity).State`. I've stepped through this code and it works when I have a real live DbContext as the implementation of my Context interface. But when I put my fake context there, I don't know how to handle it. There is no constructor for a DbEntityEntry class, so I can't just create a new one in my fake context. Has anyone had any success with either mocking or faking DbEntityEntry in your CodeFirst solutions? Or is there a better way to handle the state changes?