EF6(代码优先)、MVC、Unity 和没有存储库的服务层

2024-04-04

我的应用程序使用 SQL Server 2012、EF6、MVC 和 Web API。

它还使用存储库和各种文件,例如:

DatabaseFactory.cs
Disposable.cs
IDatabaseFactory.cs
IRepository.cs
IUnitOfWork.cs
RepositoryBase.cs
UnitOfWork.cs

我们已经在控制器和存储库之间使用了服务层 对于一些复杂的业务逻辑。我们没有计划更改为不同的数据库,并且已经指出 对我来说,最近的想法是 EF6 是一个存储库,那么为什么要构建 其上的另一个存储库和为什么我上面有所有文件.

我开始认为这是一个明智的做法。

有谁知道有没有任何例子可以实现 EF6 而无需 存储库,有服务层。我在网上搜索发现了很多 复杂的代码示例似乎毫无理由地过于复杂。

我的问题也是当使用服务层时我该放在哪里:

context = new EFDbContext()

在控制器、服务层或两者中?我读到可以通过依赖注入来做到这一点。我已经使用 Unity 作为 IOC,但我不知道如何做到这一点。


实体框架IS已经是工作单元模式实现以及通用存储库实现(DbContext 是 UoW,DbSet 是通用存储库)。我同意,在大多数应用程序中,在它们之上设计另一个 UoW 或通用存储库是一种矫枉过正的做法(此外,GenericRepsitory 被某些人认为是一种反模式)。

服务层可以充当具体的存储库,它具有封装特定于您的业务需求的数据逻辑的许多好处。如果使用它,那么几乎不需要在其上构建存储库(除非您希望能够更改后端服务技术,例如从 WCF 到 WebApi 或其他......)

我会将所有数据访问放在服务层中。不要在控制器中进行数据访问。这会将数据层泄漏到 UI 层中,这只是糟糕的设计。它违反了许多核心 SOLID 概念。

但在大多数情况下,您不需要额外的 UnitOfWork 或除此之外的其他层,除非您的应用程序非常复杂并且打算在多个环境中工作......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF6(代码优先)、MVC、Unity 和没有存储库的服务层 的相关文章

  • MVC4:jQuery 验证不显眼的本机工作不正确

    我的 MVC4 Web 应用程序是在 Umbraco 7 上构建的 我已经安装了以下 nuget 软件包 jQuery 1 10 2 jQuery Validation 1 11 1 jQuery Validation Unobtrusiv
  • UserControl 中的 Web 控件为空?

    我构建了一个小型用户控件 它本质上是一个 DropDownList 其中包含一些基于目标属性设置的预设值 这是代码 public partial class Selector System Web UI UserControl public
  • 实体框架连接字符串定义

    我只是想知道 什么是实体框架连接字符串实际意思 喜欢 metadata res Models Model1 csdl res Models Model1 ssdl res Models Model1 msl provider System
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • ADO.NET 池连接无法重用

    我正在开发一个 ASP NET MVC 应用程序 该应用程序使用 EF 6 x 来处理我的 Azure SDL 数据库 最近 随着负载的增加 应用程序开始进入无法再与 SQL 服务器通信的状态 我可以看到有 100 个到我的数据库的活动连接
  • 使用默认行为将模型绑定到接口

    我正在尝试将控制器操作绑定到接口 但仍保持默认的绑定行为 public class CoolClass ISomeInterface public DoSomething get set ISomeInterface public clas
  • 在部分视图中传递参数 - MVC3/Razor

    如何将参数传递给 MVC3 razor 中的局部视图 我在 MVC 项目中用部分视图替换了常规视图页面 对于常规视图页面 我传递了如下参数 public ActionResult MeanQ int id Access access db
  • 使用 ASP.Net 和 Ajax 的登录页面

    我正在尝试使用 html ajax 和 ASP NET 制作登录页面 数据确实传递给 ajax 函数 但是当我调试 asp 页面时 用户名和密码以 NULL 发送 该代码应该获取用户名和密码 然后返回用户 ID html页面 div Use
  • MVC DropDownListFor 和 StringLength 属性不能很好地协同工作

    我的字符串长度验证在具有字符串值的下拉列表上总是失败 这是我的模型 Required ErrorMessage Required StringLength 2 MinimumLength 2 Display Name Home Addres
  • 如何在Entity Framework 5中正确触发集合的延迟加载?

    我在我的应用程序中使用 EF5 代码优先 我有一个包含一些延迟加载字段的表 public class TestEntity public int Id get set public virtual TestEntity2 SubEntity
  • 使用 .net 3.5 和 C# 检测 Chrome

    好的 我正在使用此代码来检测浏览器 使用 chrome 时 它 给我浏览器 苹果MAC Safari 我需要它说 chrome Ater 环顾四周 我发现了这个 Google Chrome Safari 相同的浏览器名称和版本 https
  • 哈希密码如何解密? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在我的网站中使用盐技术的 SHA1 算法对密码进行哈希处理 有什么办法可以解密密码并恢复原来的密码吗 Hashing不加密 解密 当我们
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 作出选择之后、提交上传之前的 asp.net FileUpload 事件

    我想显示通过 FileUpload 控件的浏览按钮选择的文件的大小 理想情况下 该值在用户选择文件后但在单击 上传文件 按钮之前立即显示 我有一个网络表格 按钮看起来像这样
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 如何隐藏数据列表中的项目

    我想隐藏一个项目datalist根据某种条件起诉ItemBound how Wrap a PlaceHolder控制整个内容ItemTemplate 然后在 ItemDataBound 事件中 您可以执行以下操作 Protected Sub
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 正则表达式仅允许特定数字

    我正在寻找一个只允许输入特定数字的正则表达式 例如2 4 5 6 10 18 我尝试过类似的东西 2 4 5 6 10 18 我输入的任何内容都无法通过正则表达式 然后计算机用手指着我并大笑 我哪里出错了 单引号是不必要的 您正在寻找的正则

随机推荐

  • 随机但仅在 Chrome 中

    我有这个函数来创建随机的数字范围 function randomRange min max return new Array max min join split map function v i return min i sort fun
  • 返回点击按钮的索引?

    我有一个包含 30 个按钮的数组 我有一个变量按钮Clicked 当我按下按钮时 如何获取索引并将索引号存储在单击的按钮中 谢谢 JButton buttons new JButton 30 for int i 1 i lt 30 i in
  • VueJS 换行符未正确渲染

    我遇到以下问题 我从包含换行符的 API 读取数据字符串 n我想在我的模板中正确显示它们 但是当我做类似的事情时 p mytext p 文本显示为 n其中的字符就像普通文本一样 响应中的文本字符串的格式为 Hello n what s up
  • 迭代多个数组的最佳方法?

    在 Ruby 中迭代多个数组的最佳 美观且高效 方法是什么 假设我们有一个数组 a x y z b a b c 我想要这个 x a y b z c Thanks 另一种方法是使用each with index 快速基准测试表明 这比使用 z
  • PHP SREG 中的 JanRain OpenID?

    我使用我发现的名为 open id 选择器的修改后的登录设置了演示 登录工作正常并且身份 url 返回 但我要求的 SREG 数据从未填充 必需或可选 我正在使用 Gmail 帐户登录我的页面 这是我编辑的 try auth php 中的代
  • 对 SolrConfig.xml 文件的更新未得到反映

    我在 SolrConfig xml 文件中添加了一个新的请求处理程序 但是每当我尝试使用新的处理程序时 我都会收到带有 未知处理程序 错误的 404 修改SolrConfig xml文件时是否还需要修改其他文件 Thanks 您需要重新启动
  • DatagramSocket.send 线程安全吗?

    我打算使用一个实例DatagramSocket并称其为send http docs oracle com javase 7 docs api java net DatagramSocket html send 28java net Data
  • 绘制 3D 线,matlab

    我的问题非常标准 但找不到解决方案 我有点 x y z 并想绘制最佳拟合线 我正在使用下面给出的函数 和 Thanx Smith LS3DLINE M Least squares line in 3 dimensions Version 1
  • 基于 Symfony 2 的项目的安全性和登录

    我正在开发一个基于 Symfony 2 PHP 框架的 Web 应用程序 它有一个供注册用户使用的登录页面 我想为每个登录系统的用户执行一些自定义逻辑 基本上 我想在任何用户登录系统时进行记录 但我不想在主页的控制器上执行此操作 因为每次用
  • Mac OS X 10.6.7 Java 路径当前 JDK 令人困惑

    我无法理解 Mac OSX 上的多个 java 版本 实际路径与链接 通常在 Windows 中 如果我的机器上安装了多个版本 我可以选择我想要的版本的路径并使用它 但在 MAC OS X 中 我知道有一个叫做链接的东西被指向 Curren
  • .net 4.6框架已就地升级那么.net框架4.5在vs2015中如何工作?

    net 4 6框架已就地升级那么 net框架4 5在vs2015中如何工作 我只看到一个文件夹 v4 0 30319 dll 是如何存储的以及在哪里 NET Framework 4 5 是 4 0 的就地升级 4 5 1 是 4 5 的替代
  • 我可以在 Citrus 静态响应适配器负载中使用 Citrus 变量吗?

    我正在使用静态响应端点适配器返回从资源文件获取的模拟服务响应 private void setAdapterResponse StaticResponseEndpointAdapter adapter String response thr
  • 在 Python、MATLAB 等中使用 eval [重复]

    这个问题在这里已经有答案了 我确实知道不应该使用eval 出于所有显而易见的原因 性能 可维护性等 我的问题更多的是 它有合法用途吗 人们应该使用它而不是以另一种方式实现代码 由于它是用多种语言实现的 并且可能导致糟糕的编程风格 我认为它仍
  • 如何在 ggplot2 图例中使用下标 [R]

    我可以在 ggplot2 图例中使用下标吗 我懂了这个问题 https stackoverflow com questions 5293715 how to use greek symbols in ggplot2关于传说和其他地方的希腊字
  • wifi getLinkSpeed() 始终返回一个值

    我正在开发一个显示互联网速度的应用程序 喜欢 https play google com store apps details id netspeed pt https play google com store apps details
  • 同步获取 Android 上最后一个已知位置

    在 Android 上使用 LocationClient v2 API 获取最后已知位置的 正确 方法是什么 同步 manner UPDATE 这是我想出的最好的方法 它不是同步的 但它克服了处理问题的负担connect and onCon
  • 如何检查脏标志

    我想知道如果用户选择从页面导航 检查页面是否脏的最佳方法是什么 例如 有一个注册表单 用户输入他的所有信息 然后不小心点击了一个链接来进行导航 我在网上发现了这个 如果有人对任何表单输入值进行更改 它会检查页面是否脏
  • 将新的 GUID 插入 Visual Studio 2012

    是否可以创建代码片段或类似的内容来自动生成 GUID 并将其插入到 Visual Studio 2012 中的文本编辑器中 我经常需要生成新的 GUID 例如 WiX 安装程序 以及我们自己的内部框架 我曾经使用宏来执行这项工作 创建一个新
  • 在python中生成任意长度的数字升序列表

    我可以调用一个返回升序数字列表的函数吗 IE function 10 会回来 0 1 2 3 4 5 6 7 8 9 你要range https docs python org 3 library functions html func r
  • EF6(代码优先)、MVC、Unity 和没有存储库的服务层

    我的应用程序使用 SQL Server 2012 EF6 MVC 和 Web API 它还使用存储库和各种文件 例如 DatabaseFactory cs Disposable cs IDatabaseFactory cs IReposit