如果我以后要应用ado实体框架,推荐的数据访问层设计模式是什么?

2024-05-14

我正在创建一个网站并使用 Linq to SQl 作为数据访问层,并且我愿意使该网站可以在 linq to sql 和 ado 实体框架上工作,而无需更改其他层中的许多内容:业务逻辑层或 UI层,

实现这一目标的推荐模式是什么?你能简单解释一下如何做到这一点吗?

UPDATE

正如下面回答的那样,存储库模式将对我有很大帮助,

我检查了书呆子晚餐网站并理解它,但我在里面发现了这段代码:

public class DinnersController : Controller {

        IDinnerRepository dinnerRepository;

        //
        // Dependency Injection enabled constructors

        public DinnersController()
            : this(new DinnerRepository()) {
        }

        public DinnersController(IDinnerRepository repository) {
            dinnerRepository = repository;
        }

这意味着据我了解,它使用接口 IDinnerRepository 声明了一个dinnerRepository,并在构造函数中给了它dinnerRepository,在我的例子中,这将是 linq to sql 实现,

我的问题是,如果我需要切换到 ado.net 实体框架,我将需要编辑此构造函数行,或者有更好的解决方案吗?

Update 2

我应该将该存储库接口以及在我的解决方案中实现它的类放在哪里,数据访问层还是业务层?


The 存储库模式 https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx是一个不错的选择。如果将其实现为接口;那么您可以更改具体的类,而不必更改其他任何内容。

The 书呆子晚餐攻略 http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx有一个很好的存储库模式示例(带接口)。

您在那里列出的代码将进入您的控制器(如果您正在执行 MVC 应用程序);你可以创建任何你想要的类,只要它实现了IDinnerRepository接口(或者你可以有类似的东西IRepository如果您想设计一个每个人都必须实现的接口来执行基本的 CRUD 操作,则可以实现特定的接口,如果您需要更多操作,则可以实现特定的接口(但我们不要对接口疯狂)。

如果您要对应用程序进行“分层”,那么该部分将位于“业务逻辑”层,而存储库将位于“数据访问层”。该构造函数合约将是“松散”耦合的部分。

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

如果我以后要应用ado实体框架,推荐的数据访问层设计模式是什么? 的相关文章

  • 配置多个数据库Entity Framework 6

    在我的解决方案中 我有 2 个使用 Entity Framework 6 的项目 每个项目都指向不同的数据库 都使用相同的数据提供 SQL Server 我的解决方案中的第三个项目需要使用这两个数据库 我的问题是如何配置这些上下文 我尝试在
  • 在 MVC3 Razor 视图中引用 EntityFramework 4.1 命名空间

    我试图在我的 MVC3 项目中的共享视图内引用 System Data Entity Validation EF 4 1 版本 命名空间 我已经能够使用以下方式引用其他外部库 using Example Namespace 然而 当涉及到作
  • 实体框架代码优先查找与 SingleOrDefault(预加载)

    我正在使用 Entity Framework 4 2 代码优先 来访问我的数据库 我假设如果我使用查询一个实体SingleOrDefault如果实体尚未被跟踪 它只会查询数据库 但情况似乎并非如此 这Find另一方面 方法似乎确实在这样做
  • 如何通过实体键添加/删除与实体框架的多对多关系?

    I tried using Entities e new Entities EntityKey key new EntityKey Entities Users UserId 20 User user new User EntityKey
  • 在运行时更改实体框架数据库架构

    在大多数 ASP NET 应用程序中 您可以通过在运行时修改连接字符串来更改数据库存储 即 我可以通过简单地更改连接字符串中 数据库 字段的值来从使用测试数据库更改为生产数据库 我正在尝试使用实体框架更改架构 但不一定是数据库本身 但没有成
  • 大表的最佳主键格式

    我正在开发一个 ASP NET 应用程序 它有一些可能很大的数据表 我想知道定义主键的最佳方法是什么 我知道以前已经有人问过这个问题 但由于这是针对特定情况的 所以我认为这个问题是有效的 我在 SQL Server 2008 数据库上使用实
  • 使用 Entity Framework Core 2.0 更改或重命名列名称而不丢失数据

    我意识到我的一个列标题拼写错误 因此我在模型中更改了它并创建了一个新的迁移以将其更新到数据库中 一切都很完美 直到我意识到实际发生的情况是一个新列取代了现有列并删除了所有数据 碰巧的是 由于这是一个教程数据库 因此恢复数据并不重要 只需几分
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • 如何使用 Linq 将实体表与交叉引用表连接起来

    首先我要说的是 我对 Linq 比较陌生 但我似乎很快就掌握了其中的大部分内容 但这个问题却难倒了我 我找了又找都没有结果 我使用代码优先并创建了 2 个模型 项目 和 关键字 他们之间存在多对多的关系 我的实体模型如下所示 public
  • 如何在Entity Framework 5中正确触发集合的延迟加载?

    我在我的应用程序中使用 EF5 代码优先 我有一个包含一些延迟加载字段的表 public class TestEntity public int Id get set public virtual TestEntity2 SubEntity
  • 尚未为此带有 SQL Server 的 DbContext .NET Core 配置数据库提供程序

    我一直用这个把头撞在墙上 并且一直在谷歌上搜索无济于事 我刚刚开始一个新的 ASP NET Core MVC 项目 我已将这两个包安装 更新为 2 2 0 Microsoft EntityFrameworkCore SqlServer Mi
  • 实体框架中的分页

    在实体框架中 使用 LINQ to Entities 数据库分页通常按以下方式完成 int totalRecords EntityContext Context UserSet Count var list EntityContext Co
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 如何正确使用状态模式?

    在我的编程经验中 我遇到过一些状态模式的实现 并且完成了一些 我见过它们在各种场景中使用 主要是 UI 和解析 问题在于 所有这些在快速开发的压力下都变成了难以维护和理解的代码块 我正在考虑重构其中之一 但我无法在网上找到合适的资源 网上有
  • 更改实体的可访问性

    我想建立一个内部实体 我已将实体 其标量属性和导航属性更改为内部 当我尝试构建它时出现此错误 错误 6036 EntityType 文件 具有 内部 可访问性 EntitySet 文件 具有具有 公共 可访问性的 get 属性 Entity
  • 领域驱动设计和工厂类的作用

    我不清楚工厂类的角色和职责是什么 我知道工厂类应该负责创建域对象 聚合根 及其关联的实体和值对象 但我不清楚 DDD 架构的工厂 层 在哪里 工厂应该直接调用存储库来获取其数据还是服务库 工厂在以下框架中的位置 UI gt 应用程序 gt
  • LINQ to Entities 无法识别“Int32 IndexOf(System.String, System.StringComparison)”方法

    我已经使用 Entityframework 执行了 linq 查询 如下所示 GroupMaster getGroup null getGroup DataContext Groups FirstOrDefault item gt keyw
  • 如何检查DBContext是否已释放?

    我想与从外部 继承类 调用的另一个方法共享数据库上下文 而不创建新的上下文 除非正在释放它 我想检查上下文是否已处理 以便我可以创建新的上下文 这是休息 api 有多个实体的批量上传 我想共享事务 因此如果一个实体失败 它将不会提交到数据库

随机推荐

  • 未捕获的类型错误:无法读取未定义的属性“prop”

    我有 6 个输入复选框 如果选中的复选框超过 3 个 则最后一个复选框将被取消选中 为了更好地理解 请参阅我之前的question https stackoverflow com questions 35195235 if checkbox
  • 指针数组和数组指针的区别?

    char string1 3 4 koo kid kav This is a 2D array char string 3 koo kid kav This is an array of 3 pointers pointing to 1D
  • 向 Qt 样式表添加特异性时丢失样式

    这是我的代码 const QString STYLE SHEET background color rgba x x x y border 1px solid gray border radius 0px border top 1px so
  • 如何将 node_modules 包含在单独的 browserify 供应商包中

    我正在尝试将 AngularJS 应用程序转换为使用 browserify 我已经使用 napa 在 node modules 中安装了所有的 Bower 包 现在我想将它们浏览到一个单独的供应商包中 并将它们声明为 外部 依赖项 我想给他
  • FullCalendar Asp.Net WebForms

    我正在尝试实施全日历 https i stack imgur com wmhGx png在我的 ASP NET 上WebForms项目 我见过一些实现此目的的示例 但没有任何运气 因为它们是针对我不习惯的 MVC 的 My Events数据
  • 避免数据集中出现重复名称

    我正在从表中获取数据并绑定到标签并在 gridview 中下拉 但我想从表中过滤重复的名称并将相应的日期分配给 DDL 如何做到这一点 或者还有其他选择吗 private DataSet get string sql select Id N
  • 检测到 C# 无法访问的代码

    我在 Visual Studio 中的以下代码中的 i 处收到一条 检测到无法访问的代码 消息 你能看出我做错了什么吗 try RegistryKey OurKey Registry CurrentUser OurKey CreateSub
  • 是否可以进行条件解构或有后备?

    我有一个具有许多深层嵌套属性的对象 我希望能够访问 MY KEY 上的属性 如下 但如果该属性不存在 则获取 MY OTHER KEY 我怎样才能做到这一点 const X Y MY KEY Values segments segment
  • Python:“直接”调用方法是否实例化对象?

    我是 Python 新手 在对我的对象进行单元测试时 我注意到一些 奇怪 的东西 class Ape object def init self print ooook def say self s print s def main Ape
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • npm install 的 --save 选项是什么?

    我看到一些教程 其中命令是 npm install save 什么是 save选项是什么意思 更新 npm 5 As of npm 5 0 0 http blog npmjs org post 161081169345 v500 安装的模块
  • 多文件上传字段的重力形式预览缩略图

    我们使用重力形式将多个图像附加到图库自定义字段并创建新帖子 我们不知道如何在 HTML5 导入字段下显示图像缩略图 而不仅仅是在提交表单之前显示文件名 之前的答案仅涵盖单个文件上传 图片上传重力形式预览 https stackoverflo
  • 使用 Spring / JPA 写入 Postgres 数据库的 JSON 列

    我有一个名为 test 的表 其中包含 Postgres 9 3 中 json 类型的列 sample column 我正在尝试使用 Spring JPA 将以下内容写入列中 name 更新的名称 我在其他帖子中读到 我需要添加自定义转换器
  • 由于直接引用范围而不是通过中间变量而导致 Excel VBA 运行时错误 450

    当我尝试直接引用某个范围内的值时 出现运行时错误 450 但如果我使用中间变量 它就会起作用 我不明白为什么 所以我担心在将来的某个时候我会再次遇到错误而不知道为什么 我尝试过使用 With End With 块 但当我直接引用范围时它仍然
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • 如何编译GCC生成的asm?

    我正在玩一些汇编代码 有些事情困扰着我 我编译这个 include
  • LMAX Disruptor 可以移植到 C# 吗?

    我知道有些人正在开发 C 移植 C 端口可以吗 我特别考虑到 C 中易失性字段仅是 32 位的限制 如果这是唯一的问题 是否有人认为值得将该环形缓冲区写入仅具有 32 位允许的插槽数量 系统生命周期中发生的事件要少得多 我有这个权利吗 我们
  • 为什么在读取字典时要锁定

    我对我正在阅读的一本关于线程的书 C 3 in a Nutshell 中的代码列表感到困惑 在 应用程序服务器中的线程安全 主题中 给出了以下代码作为 UserCache 的示例 static class UserCache static
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • 如果我以后要应用ado实体框架,推荐的数据访问层设计模式是什么?

    我正在创建一个网站并使用 Linq to SQl 作为数据访问层 并且我愿意使该网站可以在 linq to sql 和 ado 实体框架上工作 而无需更改其他层中的许多内容 业务逻辑层或 UI层 实现这一目标的推荐模式是什么 你能简单解释一