如何在模式IUnitofwork中使用EntityFramework CodeFirst在ASP.Net MVC中使用CRUD

时间:2014-03-02 10:06:20

标签: asp.net-mvc

我在MVC中有一个PhoneBook项目并使用IUnitOfWork。 但我不知道这个项目是怎么做的。 项目的链接: http://www.mediafire.com/download/jy0b5ins5eisy5t/MvcAppPhoneBook.rar

请为我编制项目

我正在这个项目中做CRUD。

1 个答案:

答案 0 :(得分:0)

我在我的项目中使用了通用仓库和UoW,如下所示。您可以参考这个来完成您的项目。我通常有4层解决方案架构:

  1. 核心
    • 模型类
  2. 数据
    • Generic Repo and UoW
    • 的DbContext
    • 代码首次迁移
  3. 网络
    • 具有依赖注入实现的应用程序解决方案(例如,注入)
  4. 测试

    模型类

    public class User
    {
            public int Id { get; set; }
            public string Name { get; set; }
    }
    
    public class Course
    {
            public int Id { get; set; }
            public string Name { get; set; }
    }
    
  5. <强> MyDbContext.cs:

    public class MyDbContext : DbContext
        {
            public MyDbContext() : base("name=DefaultConnection”)
            {
            }
    
            public System.Data.Entity.DbSet<User> Users { get; set; }
            public System.Data.Entity.DbSet<Course> Courses { get; set; }
    
        }
    

    工作单位:

    public class UnitOfWork : IUnitOfWork
        {
            //private variable for db context
            private MyDbContext _context;
            //initial db context variable when Unit of Work is constructed
            public UnitOfWork()
            {
                _context = new MyDbContext();
            }
            //property to get db context
            public MyDbContext Context
            {
                //if not null return current instance of db context else return new
                get { return _context ?? (_context = new MyDbContext()); }
            }
            //save function to save changes using UnitOfWork
            public void Save()
            {
                _context.SaveChanges();
            }
        }
    

    通用存储库:

    public class RepositoryBase<T> : IRepositoryBase<T> where T : class
        {
            protected readonly IUnitOfWork _unitOfWork;
            private readonly IDbSet<T> _dbSet;
    
            public RepositoryBase(IUnitOfWork unitOfWork)
            {
                _unitOfWork = unitOfWork;
                _dbSet = _unitOfWork.Context.Set<T>();
            }
    
        public virtual void Save()
            {
                _unitOfWork.Save();
            }
    
            public virtual void Add(T entity)
            {
                _dbSet.Add(entity);
                _unitOfWork.Save();
            }
        //Similarly you can have Update(), Delete(), GetAll() implementation here
    
        }
    

    继承自通用仓库的实体存储库:

    public class UserRepository:RepositoryBase<User>,IUserRepository
        {
            public UserRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
            {
            }
        //Here you can also define functions specific to User
        }
    

    <强> controller.cs

    public class UserController : Controller
        {
            private readonly IUserRepository _dbUserRepository;
    
            public UserController(IUserRepository dbUserRepository)
            {
                _dbUserRepository = dbUserRepository;
            }
    
            // GET: /User/
            public ActionResult Index()
            {
            var users = _dbUserRepository.GetAll();
    
                return View(users.ToList());
            }
    
           //Other CRUD operations
    
    }