如何将 EntityFramework、Repository、UnitOfWork 和 Automapper 结合到一个 MVC 应用程序中?

2023-11-29

首先我决定创建一个名为它的接口IDataAccessLayer并开始将所有内容放入其中:类似的方法GetUsers(), GetUser(int id), GetOrderByNumber(int number), DeleteOrder(int Id) etc.

起初效果非常完美。但后来我意识到具体的实现DataLayer:IDataLayer正在变大。我决定将其切成几个部分类文件。但我仍然觉得我做错了什么。

然后我决定为每个逻辑部分创建接口,例如IUsers, IOrders, IItems不起作用,因为我是通过注入控制器构造函数的一个依赖属性来访问存储库的。因此,每次我需要在控制器中使用不同类型的 dataContext 时,我不能只是添加另一个属性。

然后,经过几个小时阅读有关实体框架的文章后,我终于意识到我必须使用存储库 and 工作单位模式。我仍然需要以某种方式将 POCO 与 ViewModel 对象分开,尽管它们几乎总是有相似之处。自动映射器有很大帮助。但现在,我不确定如何一起使用所有内容。实体框架、模式、自动映射器和依赖注入框架(如 Ninject)。

我不清楚如何将所有这些混合到一个很棒的架构中。你能给我展示一些很好的例子吗?


你可以看看这个样本(MVCArch)我几个月前就写过。 它具有以下优点:

  • 实体框架
  • 存储库和工作单元模式
  • 自动映射器
  • Ninject
  • etc...

希望这可以帮助。

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

如何将 EntityFramework、Repository、UnitOfWork 和 Automapper 结合到一个 MVC 应用程序中? 的相关文章

  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • Automapper - CreateMap 被多次调用

    当我多次调用相同类型的 Mapper CreateMap 时会发生什么 它会重写之前的地图吗 如果是这样 如果我尝试创建已经创建的地图 是否可以使其抛出异常 当多次为同一组源和目标调用 Mapper CreateMap 时 根本不会发生任何
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM

随机推荐

  • JSTL 1.0 字符串函数

    我正在尝试使用一些字符串函数 例如修剪或concat使用 JSTL 我尝试了以下方法 我尝试添加但我最终遇到了错误 我认为这适用于其他 JSTL 版本 例如 1 2 或 1 1 我需要知道的是如何在 JSTL 1 0 中使用字符串函数 JS
  • 对嵌套列表进行排序

    给出的是一个嵌套列表 具有以下标记 遗憾的是目前无法更改 我想对此列表进行排序 以及按 a 标签标题排序的所有嵌套列表 第一个 div 未嵌套在 li 中 应该用于对 ul 同级进行排序 性能也很重要 因为这个列表很容易包含超过 100 个
  • Pygame 从全屏切换到正常不起作用

    我目前正在尝试设置从窗口模式和全屏模式切换的设置 但是进入全屏并尝试返回后 游戏错误非常奇怪并且粘在左上角 顺便提一句 显示宽度 1280 显示高度 720 elif Settings Menu True screen fill 0 0 0
  • jQuery:如何动态检测窗口宽度?

    我的页面上有一个滚动元素 使用 jScrollPane jQuery 插件 我想要完成的是一种通过检测浏览器窗口的宽度来关闭滚动窗口的方法 我正在做响应式布局 我希望当浏览器低于一定宽度时关闭此滚动功能 当我刷新页面时 我能够使其工作 但是
  • 在 while 循环内将对象添加到列表中

    我正在尝试循环一个列表 该列表内部有 4 个数组 每个数组有 7 个值 我正在循环列表 然后当我从列表中获取一个数组时 因为我知道有多少个值具有该数组 所以我分配每个数组索引 如下所示 personObject setName String
  • 如何正确编码完整的 http url 字符串?

    我从用户那里获得一个 url 字符串 并希望将其转换为合法的 http url http one two Three four five 应该变成 http one two Three four 20 Five 但是 URLEncoder
  • Sass @import 指令在 Rails 引擎中使用时无法在插件中找到资源

    我正在构建一个使用 zurb foundation 样式表的 Rails 引擎 并且不断遇到相同的 Sass Syntax 错误 这看起来很奇怪 因为我在 Rails 应用程序中遵循了相同的过程 并且第一次尝试就成功了 因此 我决定通过启动
  • SQL:选择其他查询未选择的所有记录

    我正在寻找一个 SQL 查询来选择同一个表上的另一个查询未选择的所有记录 具体来说 我想选择具有特定字段 fieldA 重复项的所有记录 然后删除除其中一条记录之外的所有记录 因此 select 语句可能类似于以下内容 这不起作用 sele
  • javascript 调用函数 10 次,每次间隔 1 秒

    如何调用一个函数 10 次 for x 0 x lt 10 x callfunction 但每次通话之间间隔 1 秒 function callNTimes func num delay if num return func setTime
  • 如何在 SceneKit 中使用着色器添加透明度?

    我想从图像中获得透明效果 现在我只是用圆环进行测试 但着色器似乎不适用于 alpha 据我从这个帖子中了解到的 在 Scenekit 中使用混合函数 以及这个关于透明度的维基链接 http en wikibooks org wiki GLS
  • 如何将dojo工具包与rails 3.1 asset pipeline和coffeescript一起使用?

    我正在尝试在 Rails 3 1 应用程序上使用 dojo toolkit 作为 JS 框架 但我正在努力将 dojo require 结构与 sprockets require 和 Coffeescript 结合起来 看起来dojo需要磁
  • 如何使用 netbeans 在 java 中每次掷骰子后询问用户是否愿意继续游戏?

    我需要帮助解决这个问题 掷骰子游戏是用两个六面骰子进行的 玩游戏的用户将掷两个骰子 并生成两个介于 1 到 6 之间的随机数 两个数字的总和将用于决定下一步 如果总和为 2 3 或 12 则玩家获胜 如果总和是 7 或 11 那么他 她就输
  • 关闭 SKScene 返回 UIKit 菜单

    一旦我的 SpriteKit 游戏结束 我想回到我的UIKit MenuViewController 根据我到目前为止所学到的 使用协议 委托是最好的 选项 但我无法让它发挥作用 我知道该协议可能会高于类声明GameViewControll
  • 运行 Fiddler 作为 HTTP 到 HTTPS 反向代理

    我的机器上正在运行一项服务 该服务在 HTTPS 上发布 在 HTTP 上启动似乎有点复杂 某个远程计算机通过 HTTP 对我的计算机执行调用 这不受我的控制 我想对我的服务执行一些非性能关键的测试 看起来最简单的方法是使用有点像 HTTP
  • 在 Fortran 的 SYSTEM 子例程中使用变量

    如何在执行的命令中使用变量system子程序调用 例如 如果我想创建多个目录 例如test 1 1 test 1 2 依此类推 直到test 3 3那么我的代码应该是什么 我正在尝试以下代码 但似乎无法弄清楚在 部分要写什么 integer
  • Git 错误:无法提交配置文件

    我正在尝试将新的远程存储库 GitHub 添加到现有项目 但遇到了一个我以前从未见过且不理解的错误 git remote add github email protected me myrepo git error could not co
  • 标头和 Selenium Webdriver 2

    有没有办法在 Selenium WebDriver 测试中添加标头 与 Firefox 修改标头插件一样 我无法使用 HtmlUnitDriver 因为浏览器必须可见 WebDriver 不允许您使用任何基于浏览器的驱动程序更改或设置标头
  • 如何在设计时禁用子控件?

    我有自己的控制权 源自TCustomPanel 它有一个孩子 TEdit 在上面 type TMyControl class TCustomPanel private FEditor TEdit public constructor Cre
  • 从字典创建类实例属性?

    我正在从 CSV 导入并大致以以下格式获取数据 Field1 3000 Field2 6000 RandomField 5000 字段的名称是动态的 嗯 它们是动态的 因为可能不止 Field1 和 Field2 但我知道Field1 an
  • 如何将 EntityFramework、Repository、UnitOfWork 和 Automapper 结合到一个 MVC 应用程序中?

    首先我决定创建一个名为它的接口IDataAccessLayer并开始将所有内容放入其中 类似的方法GetUsers GetUser int id GetOrderByNumber int number DeleteOrder int Id