如何在MVC控制器中实现数据访问层我知道数据访问层或简单的DAL用于访问和检索数据库中的信息但我不知道如何在控制器内调用DAL数据。例如,我在我的DAL中创建了这个静态类,但我不确定如何将它调用到我的控制器中,任何帮助或指导将不胜感激。DohvatiMetodu是类的名称。publicstaticFormInputViewModelDohvatiMetodu(){varviewModel=newFormInputViewModel();varmetoda=new列表();varmetodaList=new列表();使用(vardb=newApplicationDbContext()){metoda=db.Metoda.ToList();}foreach(varmetodinmetoda){metodaList.Add(newSelectListItem(){Value=metod.Id.ToString(),Text=metod.Naziv});}viewModel.KoristenaMetoda=metodaList;返回视图模型;我使用简单的CRUD方法使用完整存储库模式逐步更新代码:存储库模式在应用程序的数据层和领域层之间添加了一个分离层。它还使应用程序的数据访问部分更易于测试。数据库工厂(IDatabaseFactory.cs):publicinterfaceIDatabaseFactory:IDisposable{Database_DBEntitiesGet();}数据库工厂现实(DatabaseFactory.cs):publicclassDatabaseFactory:Disposable,IDatabaseFactory{privateDatabase_DBEntitiesdataContext;publicDatabase_DBEntitiesGet(){返回dataContext??(dataContext=newDatabase_DBEntities());}protectedoverridevoidDisposeCore(){if(dataContext!=null)dataContext.Dispose();}}基础接口(IRepository.cs):publicinterfaceIRepositorywhereT:class{voidAdd(Tentity);无效更新(T实体);无效分离(T实体);voidDelete(T实体);TGetById(longId);TGetById(字符串ID);TGet(表达式>where);IEnumerableGetAll();IEnumerableGetMany(表达式>其中);无效提交();}抽像类(Repository.cs):publicabstractclassRepository:IRepositorywhereT:class{privateDatabase_DBEntitiesdataContext;私有只读IDbSet数据库集;受保护的存储库(IDatabaseFactory数据库Factory){数据库工厂=数据库工厂;dbset=DataContext.Set();}//////databasefactory实例的属性///protectedIDatabaseFactoryDatabaseFactory{get;私有集;}//////datacontext实例的属性///protectedDatabase_DBEntitiesDataContext{get{returndataContext??(dataContext=DatabaseFactory.Get());}}//////用于添加实体//////publicvirtualvoidAdd(Tentity){try{dbset.Add(entity);//dbset.Attach(实体);dataContext.Entry(entity).State=EntityState.Added;intiresult=dataContext.SaveChanges();}catch(UpdateExceptionex){}catch(DbUpdateExceptionex)//DbContext{}catch(Exceptionex){throwex;}}//////用于更新实体//////publicvirtualvoidUpdate(Tentity){try{//dbset.Attach(entity);dbset.Add(实体);dataContext.Entry(entity).State=EntityState.Modified;intiresult=dataContext.SaveChanges();}catch(UpdateExceptionex){thrownewApplicationException(Database_ResourceFile.DuplicateMessage,ex);}catch(DbUpdateExceptionex)//DbContext{thrownewApplicationException(Database_ResourceFile.DuplicateMessage,ex);}catch(Exceptionex){抛出ex;}}//////用于删除具有类的实体//////publicvirtualvoidDelete(Tentity){dbset.Remove(entity);intiresult=dataContext.SaveChanges();}//提交保存更改publicvoidCommit(){//仍然需要相应修改DataContext.SaveChanges();}//////根据int64id值获取值/////////publicvirtualTGetById(longid){returndbset.Find(id);}//////根据字符串id输入获取值/////////publicvirtualTGetById(stringid){returndbset.Find(id);}//////获取所有记录//////publicvirtualIEnumerableGetAll(){returndbset.AsNoTracking().ToList();}//////根据谓词条件获取记录/////////publicvirtualIEnumerableGetMany(Expression>where){returndbset.Where(where).ToList();}////////////publicvoidDetach(Tentity){dataContext.Entry(entity).State=EntityState.Detached;}//////根据谓词条件获取单个记录/////////publicTGet(Expression>where){returndbset.Where(where).FirstOrDefault();现在重点是如何在控制器中访问这个存储库模式我们开始:1.你有用户模型:publicpartialclassUser{publicintId{get;放;}公共字符串名称{得到;放;}}2.Now你必须创建UserModel的Repository类publicclassUserRepository:Repository,IUserRepository{privateDatabase_DBEntitiesdataContext;受保护的IDatabaseFactoryDatabaseFactory{get;私有集;}publicUserRepository(IDatabaseFactorydatabaseFactory):base(databaseFactory_DBEntities){DatabaseFactory=DataContext{get{returndataContext??(dataContext=DatabaseFactory.Get());}}公共接口IUserRepository:IRepository{}}3.现在您必须使用所有CRUD方法创建UserService接口(IUserService.cs):publicinterfaceIUserService{#regionUserDetailsListGetAllUsers();intSaveUserDetails(用户用户模型);intUpdateUserDetails(用户用户模型);intDeleteUserDetails(intId);#endregion}4.现在您必须使用所有CRUD方法创建UserService接口(UserService.cs):publicclassUserService:IUserService{IUserRepository_userRepository;publicUserService(){}publicUserService(IUserRepositoryuserRepository){这个。_userRepository=用户资料库;}publicListGetAllUsers(){try{IEnumerableliUser=_userRepository.GetAll();返回liUser.ToList();}catch(Exceptionex){抛出ex;}}//////保存用户详细信息。//////部门模型。///publicintSaveUserDetails(UserUsermodel){try{if(Usermodel!=null){_userRepository.Add(Usermodel);返回1;}否则返回0;}抓住{扔;}}//////更新用户详细信息。//////部门模型。///publicintUpdateUserDetails(用户Usermodel){try{if(Usermodel!=null){_userRepository.Update(Usermodel);返回1;}否则返回0;}抓住{扔;}}//////删除用户详细信息。/////代码标识符。///publicintDeleteUserDetails(intId){try{UserUsermodel=_userRepository.GetById(Id);如果(用户模型!=null){_userRepository.Delete(用户模型);返回1;}否则返回0;}抓住{扔;}}}5.现在已经为存储库模式设置好了,您可以访问用户控制器中的所有数据://这是用户控制器publicclassUserProfileController:Controller{IUserService_userservice;publicCustomerProfileController(IUserServiceuserservice){this._userservice=userservice;}[HttpPost]publicActionResultGetAllUsers(intid){UserobjUser=newUser();objUser=_userservice.GetAllUsers().Where(x=>x.Id==id).FirstOrDefault();干杯!以上就是C#学习教程:如何在MVCController中实现数据访问层共享。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注——本文收集自网络,不代表独立如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
