在ASP.NET MVC中实现存储库模式和unitOfWork的最佳实践

有毒

我相信,从最近几天开始,我就致力于实施Repository Pattern和UnitOfWork,并且已经完成了很长时间。我相信有很多方法可以实现这一点,但是我很感兴趣的是找到最佳方法。

我正在使用Visual Studio 2013用ASP.NET MVC 5编码的非常简单的示例。我主要的问题重点是UnitOfWork的实现。是否建议对每个业务使用多个UnitOfWorks,以私有方式实现存储库功能并为控制器提供公用功能,以供使用??

我通过通用存储库在控制器类中具有函数表(SQL Server)。我有IGenericRepository具有IQueryable一个功能,我有GenericRepository类,我在其中实现此接口。我有从BaseContext继承的FunctionContext。我之所以拥有baseContext,是因为所有dbcontexts都可以使用一条路径来访问数据库,但同时将表的数量限制为业务需要。

现在在我的身边;

  1. 一个BaseContext:DbContext
  2. 多个DbContext,将所有必需的表绑定到扩展BaseContext的单个业务关注点
  3. 通用存储库接口(CRUD)
  4. 通用存储库实现类
  5. 特定的存储库类,扩展通用存储库,以防在CRUD操作之上需要更多功能。
  6. 单个UnitOfWork->以专用方法进入所需的一个或多个存储库,仅提供使用功能的公共方法
  7. 控制器调用要求UnitOfWork使用公共方法。

在下面的程序中,所有我正在得到功能标题列表并传递给控制器​​进行打印

通用存储库接口

 public interface IGenericRepository<TEntity> : IDisposable
{
    IQueryable<TEntity> GetAll(); 

}

通用存储库

public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
    protected DbSet<TEntity> _DbSet;
    private readonly DbContext _dbContext;

    public GenericRepository()
    {

    }

    public GenericRepository(DbContext dbContext)
    {
        this._dbContext = dbContext;
        _DbSet = _dbContext.Set<TEntity>();
    }



    public IQueryable<TEntity> GetAll()
    {
        return _DbSet;
    }


    public void Dispose()
    {

    }
}

BaseContext

 public class BaseContext<TContext> : DbContext where TContext : DbContext
{
    static BaseContext()
    {
        Database.SetInitializer<TContext>(null);
    }

    protected BaseContext()
        : base("name = ApplicationDbConnection")
    { }
}

FunctionContext

 public class FunctionsContext : BaseContext<FunctionsContext>
{
    public DbSet<App_Functions> Functions { get; set; }
}

功能映射类

[Table("Functions")]
public class App_Functions
{
     public App_Functions()
    {
    }

    [Key]
    public int Function_ID { get; set; }

    [StringLength(50)]
    [Required]
    public string Title { get; set; }

    public int Hierarchy_level { get; set; }
}

功能域类

 public class Functions
{
    public Functions()
    {

    }

    public int Function_ID { get; set; }
    public string Title { get; set; }
    public int Hierarchy_level { get; set; }
}

Function_UnitOfWork

public class Function_UnitOfWork
{
   private GenericRepository<App_Functions> _function_Repository = new GenericRepository<App_Functions>(new FunctionsContext());

   public Function_UnitOfWork()
   {

   }

   private List<Functions> getAllFunctionsFromRepository()
   {
       List<Functions> query = new List<Functions>();

       query = _function_Repository.GetAll().Select(x => new Functions
       {
           Function_ID = x.Function_ID,
           Title = x.Title,
           Hierarchy_level = x.Hierarchy_level
       }).ToList();

       return query; 
   }

   public List<Functions>GetAllFunctions()
   {
       return getAllFunctionsFromRepository();
   }



}

控制器类

public class HomeController : Controller
{
    public ActionResult Index()
    {
         Function_UnitOfWork UOF = new Function_UnitOfWork();

       var a1 = UOF.GetAllFunctions();

        foreach(var item in a1)
        {
            var b1 = item.Title;
        }


        return View();
    }
}
维托雷

尽管基于意见,但仅工作单位模式的名称表明对象的时间有限。所以在控制器中使用它应该像

public ActionResult Index()
{
   using(var UOF = new Function_UnitOfWork()) {

     var a1 = UOF.GetAllFunctions();

     foreach(var item in a1)
     {
       var b1 = item.Title;
     }
   }

    return View();
}

简而言之,我们使用的一种方法是

public class DataObject { }

public class Repo: IRepo<T> where T: DataObject

public class RepoController<T> : Controller where T: DataObject {
   protected IRepo<T> Repo;
}

因此,控制器将是通用的,并将具有用于特定回购的字段

您将使用一些依赖项注入工具,例如ninject或mef来绑定具有回购协议的控制器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在asp.net mvc 5中实现存储库

来自分类Dev

在ASP.NET中实现存储库和工作单元模式

来自分类Dev

在Asp.Net MVC 5中实现多个数据库的最佳实践是什么?

来自分类Dev

ASP.NET MVC / WebApi的Azure表存储最佳实践

来自分类Dev

在我的asp.net MVC Web应用程序中获取通用存储库+子存储库+ UnitOfWork

来自分类Dev

ASP .Net Identity,Dapper和存储过程最佳实践

来自分类Dev

在ASP.NET MVC中存储API访问密钥的最佳实践

来自分类Dev

asp.net mvc 中的 UnitOfWork 错误

来自分类Dev

在ASP.NET/MVC中验证复杂案例的最佳实践?

来自分类Dev

ASP.NET MVC中的最佳实践ViewModel验证

来自分类Dev

ASP.Net Core MVC存储库模式意外处置

来自分类Dev

ASP.NET MVC Web应用程序循环访问和修改数据库的最佳实践

来自分类Dev

ASP.NET MVC在Controller中异步实现的最佳方法

来自分类Dev

没有存储库模式的ASP.Net MVC和实体框架项目体系结构

来自分类Dev

在ASP.NET MVC中的UnitOfWork中强制转换DbContext

来自分类Dev

ASP.NET MVC模型验证最佳实践

来自分类Dev

ASP.NET MVC 5 最佳实践表单提交

来自分类Dev

ASP.net 核心 MVC 服务文件最佳实践

来自分类Dev

类库中的ASP.Net ASMX Web服务(最佳实践)

来自分类Dev

在ASP.NET MVC和LINQ中执行存储过程

来自分类Dev

在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?

来自分类Dev

在asp.net mvc中返回错误的最佳实践是什么

来自分类Dev

在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?

来自分类Dev

在ASP .NET MVC中存储会话数据

来自分类Dev

在ASP .NET MVC中存储会话数据

来自分类常见问题

ASP.NET Identity中角色与声明的最佳实践

来自分类Dev

避免ASP.NET中View重复请求的最佳实践

来自分类Dev

ASP.NET模型的简单最佳实践

来自分类Dev

最佳实践-ASP.NET/实体框架

Related 相关文章

  1. 1

    在asp.net mvc 5中实现存储库

  2. 2

    在ASP.NET中实现存储库和工作单元模式

  3. 3

    在Asp.Net MVC 5中实现多个数据库的最佳实践是什么?

  4. 4

    ASP.NET MVC / WebApi的Azure表存储最佳实践

  5. 5

    在我的asp.net MVC Web应用程序中获取通用存储库+子存储库+ UnitOfWork

  6. 6

    ASP .Net Identity,Dapper和存储过程最佳实践

  7. 7

    在ASP.NET MVC中存储API访问密钥的最佳实践

  8. 8

    asp.net mvc 中的 UnitOfWork 错误

  9. 9

    在ASP.NET/MVC中验证复杂案例的最佳实践?

  10. 10

    ASP.NET MVC中的最佳实践ViewModel验证

  11. 11

    ASP.Net Core MVC存储库模式意外处置

  12. 12

    ASP.NET MVC Web应用程序循环访问和修改数据库的最佳实践

  13. 13

    ASP.NET MVC在Controller中异步实现的最佳方法

  14. 14

    没有存储库模式的ASP.Net MVC和实体框架项目体系结构

  15. 15

    在ASP.NET MVC中的UnitOfWork中强制转换DbContext

  16. 16

    ASP.NET MVC模型验证最佳实践

  17. 17

    ASP.NET MVC 5 最佳实践表单提交

  18. 18

    ASP.net 核心 MVC 服务文件最佳实践

  19. 19

    类库中的ASP.Net ASMX Web服务(最佳实践)

  20. 20

    在ASP.NET MVC和LINQ中执行存储过程

  21. 21

    在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?

  22. 22

    在asp.net mvc中返回错误的最佳实践是什么

  23. 23

    在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?

  24. 24

    在ASP .NET MVC中存储会话数据

  25. 25

    在ASP .NET MVC中存储会话数据

  26. 26

    ASP.NET Identity中角色与声明的最佳实践

  27. 27

    避免ASP.NET中View重复请求的最佳实践

  28. 28

    ASP.NET模型的简单最佳实践

  29. 29

    最佳实践-ASP.NET/实体框架

热门标签

归档