如何在MVC Controller中实现数据访问层

我知道数据访问层或简单的DAL用于访问和检索数据库中的信息,但我不知道如何在控制器内调用DAL数据。 例如,我在我的DAL中创建了这个静态类,但我不确定如何将它调用到我的控制器,任何帮助或指南都将不胜感激。 DohvatiMetodu是该类的名称。

public static FormInputViewModel DohvatiMetodu() { var viewModel = new FormInputViewModel(); var metoda = new List(); var metodaList = new List(); using (var db = new ApplicationDbContext()) { metoda = db.Metoda.ToList(); } foreach (var metod in metoda) { metodaList.Add(new SelectListItem() {Value = metod.Id.ToString(), Text = metod.Naziv}); } viewModel.KoristenaMetoda = metodaList; return viewModel; 

根据用户的许多要求,我使用简单的CRUD方法逐步更新了具有完整存储库模式的代码:

存储库模式在应用程序的数据层和域层之间添加分隔层。 它还使应用程序的数据访问部分更易于测试。

数据库工厂(IDatabaseFactory.cs):

 public interface IDatabaseFactory : IDisposable { Database_DBEntities Get(); } 

数据库工厂实现(DatabaseFactory.cs):

 public class DatabaseFactory : Disposable, IDatabaseFactory { private Database_DBEntities dataContext; public Database_DBEntities Get() { return dataContext ?? (dataContext = new Database_DBEntities()); } protected override void DisposeCore() { if (dataContext != null) dataContext.Dispose(); } } 

基本接口(IRepository.cs):

 public interface IRepository where T : class { void Add(T entity); void Update(T entity); void Detach(T entity); void Delete(T entity); T GetById(long Id); T GetById(string Id); T Get(Expression> where); IEnumerable GetAll(); IEnumerable GetMany(Expression> where); void Commit(); } 

抽象类(Repository.cs):

  public abstract class Repository : IRepository where T : class { private Database_DBEntities dataContext; private readonly IDbSet dbset; protected Repository(IDatabaseFactory databaseFactory) { DatabaseFactory = databaseFactory; dbset = DataContext.Set(); } ///  /// Property for the databasefactory instance ///  protected IDatabaseFactory DatabaseFactory { get; private set; } ///  /// Property for the datacontext instance ///  protected Database_DBEntities DataContext { get { return dataContext ?? (dataContext = DatabaseFactory.Get()); } } ///  /// For adding entity ///  ///  public virtual void Add(T entity) { try { dbset.Add(entity); // dbset.Attach(entity); dataContext.Entry(entity).State = EntityState.Added; int iresult = dataContext.SaveChanges(); } catch (UpdateException ex) { } catch (DbUpdateException ex) //DbContext { } catch (Exception ex) { throw ex; } } ///  /// For updating entity ///  ///  public virtual void Update(T entity) { try { // dbset.Attach(entity); dbset.Add(entity); dataContext.Entry(entity).State = EntityState.Modified; int iresult = dataContext.SaveChanges(); } catch (UpdateException ex) { throw new ApplicationException(Database_ResourceFile.DuplicateMessage, ex); } catch (DbUpdateException ex) //DbContext { throw new ApplicationException(Database_ResourceFile.DuplicateMessage, ex); } catch (Exception ex) { throw ex; } } ///  /// for deleting entity with class ///  ///  public virtual void Delete(T entity) { dbset.Remove(entity); int iresult = dataContext.SaveChanges(); } //To commit save changes public void Commit() { //still needs modification accordingly DataContext.SaveChanges(); } ///  /// Fetches values as per the int64 id value ///  ///  ///  public virtual T GetById(long id) { return dbset.Find(id); } ///  /// Fetches values as per the string id input ///  ///  ///  public virtual T GetById(string id) { return dbset.Find(id); } ///  /// fetches all the records ///  ///  public virtual IEnumerable GetAll() { return dbset.AsNoTracking().ToList(); } ///  /// Fetches records as per the predicate condition ///  ///  ///  public virtual IEnumerable GetMany(Expression> where) { return dbset.Where(where).ToList(); } ///  /// ///  ///  public void Detach(T entity) { dataContext.Entry(entity).State = EntityState.Detached; } ///  /// fetches single records as per the predicate condition ///  ///  ///  public T Get(Expression> where) { return dbset.Where(where).FirstOrDefault(); } } 

现在重点是如何在控制器中访问此存储库模式这里我们去:

1.你有用户模型:

 public partial class User { public int Id { get; set; } public string Name { get; set; } } 

2.现在您必须创建UserModel的Repository Class

 public class UserRepository : Repository, IUserRepository { private Database_DBEntities dataContext; protected IDatabaseFactory DatabaseFactory { get; private set; } public UserRepository(IDatabaseFactory databaseFactory) : base(databaseFactory) { DatabaseFactory = databaseFactory; } protected Database_DBEntities DataContext { get { return dataContext ?? (dataContext = DatabaseFactory.Get()); } } public interface IUserRepository : IRepository { } } 

3.现在您必须使用所有CRUD方法创建UserService接口(IUserService.cs):

 public interface IUserService { #region User Details List GetAllUsers(); int SaveUserDetails(User Usermodel); int UpdateUserDetails(User Usermodel); int DeleteUserDetails(int Id); #endregion } 

4.现在您必须使用所有CRUD方法创建UserService接口(UserService.cs):

 public class UserService : IUserService { IUserRepository _userRepository; public UserService() { } public UserService(IUserRepository userRepository) { this._userRepository = userRepository; } public List GetAllUsers() { try { IEnumerable liUser = _userRepository.GetAll(); return liUser.ToList(); } catch (Exception ex) { throw ex; } } ///  /// Saves the User details. ///  /// The deptmodel. ///  public int SaveUserDetails(User Usermodel) { try { if (Usermodel != null) { _userRepository.Add(Usermodel); return 1; } else return 0; } catch { throw; } } ///  /// Updates the User details. ///  /// The deptmodel. ///  public int UpdateUserDetails(User Usermodel) { try { if (Usermodel != null) { _userRepository.Update(Usermodel); return 1; } else return 0; } catch { throw; } } ///  /// Deletes the User details. ///  /// The code identifier. ///  public int DeleteUserDetails(int Id) { try { User Usermodel = _userRepository.GetById(Id); if (Usermodel != null) { _userRepository.Delete(Usermodel); return 1; } else return 0; } catch { throw; } } } 

5.现在全部为存储库模式设置,您可以访问用户控制器中的所有数据:

 //Here is the User Controller public class UserProfileController : Controller { IUserService _userservice; public CustomerProfileController(IUserService userservice) { this._userservice = userservice; } [HttpPost] public ActionResult GetAllUsers(int id) { User objUser=new User(); objUser = _userservice.GetAllUsers().Where(x => x.Id == id).FirstOrDefault(); } } 

干杯!!