我应该将通用存储库与EntityFramework5一起使用吗?我目前正在使用具有通用存储库和工作单元模式的实体框架。我的模型类似于本文中描述的模型。我过去使用过GenericRepositories,并且非常喜欢它可以提供的全局功能。但是,当我将它与EntityFramework一起使用时,我似乎每天都会遇到更多问题。在处理父/子/交集关系时,这些问题似乎更多。将通用存储库与EF结合使用开始给我留下不好的印象,我开始认为将通用存储库与EF结合使用是错误的方法。有人可以帮助我朝着正确的方向前进吗?本文的方法实际上会变得很痛苦,因为您已经在EF中拥有一个通用存储库和一个通用IUnitOfWork,为每种类型创建特定的存储库只会消除通用的好处!我在这里发布了一个示例,说明我如何拥有一个通用存储库和我的IUnitOfWork,这样您就可以拥有一个非常好的存储库!公共接口IUnitOfWork:IDisposable{voidSave();无效保存(SaveOptionssaveOptions);}publicinterfaceIRepository:IDisposablewhereTEntity:class{IUnitOfWorkSession{get;}IListGetAll();IListGetAll(表达式>谓词);bool添加(TEntity实体);布尔删除(实体实体);布尔更新(实体实体);boolIsValid(TEntity实体);实现如下:以上是C#学习教程:我应该将通用存储库与EntityFramework5一起使用吗?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassRepository:Component,IRepository{protectedDbContextsession;publicvirtualIUnitOfWorkSession{get{if(session==null)thrownewInvalidOperationException("AsessionIUnitOfWorkdorepositórion?oestáinstanciada.");返回(作为IUnitOfWork的会话);}}publicvirtualDbContextContext{get{returnses锡安;}}publicRepository(IUnitOfWorkinstance){SetSession(instance);}publicIListGetAll()whereTEntity:class{returnsession.Set().ToList();}publicIListGetAll(Expression>predicate)whereTEntity:class{returnsession.Set().Where(predicate).ToList();}publicboolAdd(TEntityentity)whereTEntity:class{if(!IsValid(entity))returnfalse;尝试{session.Set(typeof(TEntity)).Add(entity);返回session.Entry(entity).GetValidationResult().IsValid;}catch(Exceptionex){if(ex.InnerException!=null)thrownewException(ex.InnerException.Message,ex);抛出新的异常(ex.Message,ex);}}publicboolDelete(TEntityentity)whereTEntity:class{if(!IsValid(entity))returnfalse;尝试{session.Set(typeof(TEntity)).Remove(entity);返回session.Entry(entity).GetValidationResult().IsValid;}catch(Exceptionex){if(ex.InnerException!=null)thrownewException(ex.InnerException.Message,ex);抛出新的异常(例如我ssage,例如);}}publicboolUpdate(TEntityentity)whereTEntity:class{if(!IsValid(entity))returnfalse;尝试{session.Set(typeof(TEntity)).Attach(entity);session.Entry(entity).State=EntityState.Modified;返回session.Entry(entity).GetValidationResult().IsValid;}catch(Exceptionex){if(ex.InnerException!=null)thrownewException(ex.InnerException.Message,ex);抛出新的异常(ex.Message,ex);}}publicvirtualboolIsValid(TEntityvalue)whereTEntity:class{if(value==null)thrownewArgumentNullException("Aentidaden?opodesernula.");返回真;}publicvoidSetSession(IUnitOfWorksession){SetUnitOfWork(session);}protectedinternalvoidSetUnitOfWork(IUnitOfWorksession){if(!(sessionisDbContext))thrownewArgumentException("AinstanciaIUnitOfWorkdeveumDbContext.");SetDbContext(会话作为DbContext);}protectedinternalvoidSetDbContext(DbContextsession){if(session==null)thrownewArgumentNullException("DbContext:实例");if(!(sessionisIUnitOfWork))thrownewArgumentException("AinstanciaDbContextdeveimplementarainterfaceIUnitOfWork.");this.session=session;}}顶一下,如涉及侵权请点右联系管理员删除如转载请注明出处:
