紧接着我关于嘲笑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;
Run Code Online (Sandbox Code Playgroud)
Context是我自己的DbContext的接口.
我遇到的问题是,我该如何处理
Context.Entry(entity).State.
我已经介绍了这段代码,当我有一个真实的DbContext作为我的Context接口的实现时,它就可以工作了.但是当我把假的上下文放在那里时,我不知道如何处理它.
DbEntityEntry类没有构造函数,所以我不能在我的伪上下文中创建一个新构造函数.
有没有人在CodeFirst解决方案中嘲弄或伪造DbEntityEntry有什么成功?
或者有更好的方法来处理状态变化吗?
我正在使用本教程伪造我的DbContext并测试:http://refactorthis.wordpress.com/2011/05/31/mock-faking-dbcontext-in-entity-framework-4-1-with-a-generic -repository /
但我必须更改FakeMainModuleContext实现以在我的控制器中使用:
public class FakeQuestiona2011Context : IQuestiona2011Context
{
private IDbSet<Credencial> _credencial;
private IDbSet<Perfil> _perfil;
private IDbSet<Apurador> _apurador;
private IDbSet<Entrevistado> _entrevistado;
private IDbSet<Setor> _setor;
private IDbSet<Secretaria> _secretaria;
private IDbSet<Pesquisa> _pesquisa;
private IDbSet<Pergunta> _pergunta;
private IDbSet<Resposta> _resposta;
public IDbSet<Credencial> Credencial { get { return _credencial ?? (_credencial = new FakeDbSet<Credencial>()); } set { } }
public IDbSet<Perfil> Perfil { get { return _perfil ?? (_perfil = new FakeDbSet<Perfil>()); } set { } }
public IDbSet<Apurador> Apurador { get …Run Code Online (Sandbox Code Playgroud) 我有一个Base Repository,所有Entities存储库都继承了它.
在我的睾丸中,我创建了一个Fake DbContext和Fake DbSet来测试我的存储库,但是当我在FakeDbContext中实现一些方法时,我无法实现IDbContext.Entry方法:
public class FakeDbContext : IDbContext
{
private IDbSet<Usuario> _usuario;
private IDbSet<Atividade> _atividade;
private IDbSet<Autor> _autor;
private IDbSet<CategoriaModulo> _categoriaModulo;
private IDbSet<CategoriaMateria> _categoriaMateria;
private IDbSet<Site> _site;
private IDbSet<Modulo> _modulo;
private IDbSet<Perfil> _perfil;
private IDbSet<CategoriaGaleriaImagem> _categoriaGaleriaImagem;
public IDbSet<Usuario> Usuario { get { return _usuario ?? (_usuario = new FakeDbSet<Usuario>()); } set { } }
public IDbSet<Atividade> Atividade { get { return _atividade ?? (_atividade = new FakeDbSet<Atividade>()); } set { } }
public IDbSet<Autor> Autor { …Run Code Online (Sandbox Code Playgroud)