Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在何处存储与模型相关的方法_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 在何处存储与模型相关的方法

C# 在何处存储与模型相关的方法,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我希望这个问题还没有得到回答,但我甚至不知道该搜索什么 我有一个MVC项目,我需要从数据库返回一个用户列表。很简单。但我只想返回某些用户。同样,简单的东西 让我困惑的是,我不知道应该把代码放在哪里。如果我把它放在控制器中,我最终会在多个方法中使用相同的代码,并分布在多个控制器上 目前,我已经在dbcontext类中放置了返回用户的方法。这是可行的,而且似乎有道理,但我想知道是否有更好的方法?那门课最终会在一个更大的项目中变得更大 我已经研究了使用存储库类,但这似乎只是添加了一个附加层。我使用的是

我希望这个问题还没有得到回答,但我甚至不知道该搜索什么

我有一个MVC项目,我需要从数据库返回一个用户列表。很简单。但我只想返回某些用户。同样,简单的东西

让我困惑的是,我不知道应该把代码放在哪里。如果我把它放在控制器中,我最终会在多个方法中使用相同的代码,并分布在多个控制器上

目前,我已经在dbcontext类中放置了返回用户的方法。这是可行的,而且似乎有道理,但我想知道是否有更好的方法?那门课最终会在一个更大的项目中变得更大

我已经研究了使用存储库类,但这似乎只是添加了一个附加层。我使用的是EF6,没有做任何单元测试(还没有)

下面的代码显示了dbcontext类的结构(为了保持简洁,我已经编辑掉了实际的代码)

public-class-LeadsDB:DbContext
{
公众领袖
:基本(“潜在客户”)
{
}
公共数据库集用户{get;set;}
public IEnumerable GetUserList(bool includeBlank=true)
{
返回用户列表;
}
}
正如他们所说:

计算机科学中的所有问题都可以通过另一个间接层次来解决。。。除了间接层太多的问题

因此,根据应用程序的大小和范围,您需要决定有多少层间接寻址可以让您达到应用程序可维护性的最佳点

如果您的应用程序非常小,请直接将这些方法放到您的上下文中。如果它足够大,以至于您的DbContext无法维护,我会创建存储库。等等


在我正在开发的应用程序中,我们只与实体框架进行数据相关操作的交互。我们所有的存储库都返回DTO,DTO是我们数据模型的抽象。我们的控制器进一步将大多数DTO转换为ViewModel,然后再将其传递给视图。在控制器和存储库之间有一个“管理器”层来处理业务逻辑和安全检查。我们最终得到了很多层,但我们发现了将视图、表示、业务、安全和数据模型解耦的价值。

这看起来像一个实体框架DBContext;如果是,则将其用作数据层

可能考虑使用“业务层”抽象模型对对象做额外的事情。你的数据访问层应该做的就是:处理数据

例如,如果您有一个单例类作为业务层,那么您可以使用数据层直接处理数据,然后使用业务层将业务逻辑应用于该数据并将其返回到表示层(无论是网站、windows窗体等)


业务逻辑层可能会检查缓存中的数据,如果数据不存在,则从数据层检索数据,将其放入缓存并返回到表示层

存储库将是您的下一个逻辑步骤。那层很好。站在业务逻辑和数据库访问代码之间。在我看来,你的
LeadsDB
类很好,在上面再添加一个抽象是毫无意义的。@你不知道他的解决方案会有多大,所以建议再添加一个抽象层毫无意义是狭隘的。没有激进的答案。。。根据他在做什么以及他的解决方案会有多大,有不同的方法来实现他想要实现的目标。感谢StriplingWarrior和其他回复的人。这个项目将相当小,所以我会继续做我正在做的事情。
public class LeadsDB :DbContext
{
    public LeadsDB()
        : base("Leads")
    {
    }

    public DbSet<User> Users { get; set; }

    public IEnumerable<SelectListItem> GetUserList(bool includeBlank = true)
    {
        return UserList;
    }
}