分层架构中的实体框架

2024-04-04

我正在使用实体框架的分层架构。这是我到目前为止想到的(除 UI 之外的所有项目都是类库):

  • Entities:POCO 实体。完全的执着无知。没有参考其他项目。由 Microsoft 的 ADO.Net POCO 实体生成器生成。

  • DAL:带有上下文类的 EDMX(实体模型)文件。 (生成 t4)。参考:Entities

  • BLL:业务逻辑层。将在这一层实现存储库模式。参考:Entities, DAL。这是填充对象上下文的地方:var ctx=new DAL.MyDBEntities();

  • UI:表示层:ASP.NET网站。参考:Entities, BLL+ 配置文件中实体的连接字符串条目(问题#2)。

现在我的三个问题:

  1. 我的分层方法正确吗?
  2. 在我的 UI 中,我按如下方式访问 BLL:
    var customerRep = new BLL.CustomerRepository();
    var Customer = customerRep.GetByID(myCustomerID);

    问题是我必须在 UI 的 web.config/app.config 中定义实体连接字符串,否则会出现运行时异常。在 UI 中定义实体连接字符串是否会破坏层的区别?或者说它在多层架构中是可以接受的。

  3. 我是否应该采取任何额外的步骤来执行更改跟踪、延迟加载等(我所说的等是指实体框架在传统的、1 个项目、非 POCO 代码生成中涵盖的功能)?

感谢并为这个冗长的问题道歉。


BLL:业务逻辑层。将在这一层实现存储库模式

我不太同意这一点。存储库旨在抽象底层数据存储(SQL Server、XML 等)。这是一个数据层问题,而不是业务层问题 - 因此为什么它应该在 BLL 中?

我的分层方法正确吗?

有点儿。 :) 这有点主观,但通常你有:

  • Data
    • 存储库位于此处。
  • Business
    • 业务规则、领域逻辑和实体。
  • Presentation
    • 用户界面/网络应用程序。

现在,通常这三者会进一步分解。所以在你的情况下我会:

  1. MyCompany.MyProject.Data(存储库)
  2. MyCompany.MyProject.Business.Services(调用存储库、应用业务规则等)
  3. MyCompany.MyProject.Business.Domain 模型(实体)
  4. MyCompany.MyProject.UI(Web 应用程序)

我是否应该采取任何额外的步骤来执行更改跟踪、延迟加载等(我所说的等是指实体框架在传统的、1 个项目、非 POCO 代码生成中涵盖的功能)?

如果您不使用 POCO(例如您使用默认代码生成)。那么您就无需担心更改跟踪。

至于延迟加载 - 这是您需要做出的决定。我亲自禁用延迟加载,因为我不希望懒惰的开发人员在没有要求时返回一堆记录。

相反,强制调用代码(例如业务/服务)急切加载它需要什么。

如果您使用 ASP.NET MVC 应用程序,并且启用了延迟加载,您的视图最终可能会在渲染时调用数据库,从而破坏 MVC 模式。

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

分层架构中的实体框架 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 对多个对象使用事件处理程序

    我有 20 件物品List
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 访问数据视图中过滤项目的列表

    我使用 DataView 来填充网格 并使用过滤器与可见行进行交互 我的问题是在应用过滤器后 行更改或行计数更改 我如何访问数据视图以仅迭代那些可见行 例如进行一些计算 因为行本身没有公开暴露 如果是的话 行并不总是数据元素 因为也可以引用
  • 向 ObservableCollection 添加元素会导致异常 Index was out of range

    我有一个代码 允许用户选择一个文件 将一些有关它的信息添加到可观察的集合中并显示上传进度 完成后 它将图像绑定到图像视图 它立即可以正常工作 但如果重复该过程 则会引发异常 System ArgumentOutOfRangeExceptio
  • 从 URL 添加图像到 PDF?

    我正在尝试将 URL 地址中的图像添加到我的 pdf 中 代码是 Image image Image getInstance http www google com intl en ALL images logos images logo
  • 我无法理解的Python print 行为

    我的代码片段如下所示 from time import sleep for i in xrange 10 status hello s str i status status chr 8 len status 1 sleep 1 print
  • C# CsvHelper - 具有不同数量属性的记录

    我在遗留项目上使用 CsvHelper 版本 7 1 0 如果可能的话 我宁愿暂时保留该版本 我有一个具有不同数量属性的对象列表 我想将其保存为 csv 例如 var list new List
  • Express.js文档中嵌套的[]是什么意思?

    例如 app listen方法记录如下 方括号中嵌套的 host 和 backlog 是什么意思 app listen port host backlog callback 谢谢你 方括号通常是可选参数 像这样的嵌套方括号意味着它们是可选的
  • Yii 提交按钮 i18n

    我找到了如何国际化提交按钮的消息 例如 echo CHtml submitButton Yii t tr Print array confirm gt Yii t tr Please confirm printing 然后设置语言也可以很好
  • 如果日志级别低于阈值,则防止昂贵的日志调用

    如果我执行 NLog Trace logger Trace Json 0 Newtonsoft Json JsonConvert DeserializeObject myObject 我的最低级别出现错误
  • 如何使用php中的password_hash函数对1000个或更多字符的令牌进行哈希处理?

    我有一个大约 1400 个字符的令牌 我想使用 password hash 函数对其进行哈希处理 但使用 PASSWORD DEFAULT 算法将仅使用前 72 个字符生成哈希值 我已经探索了 PASSWORD ARGON2I 算法 但我不
  • 不要使用“object”作为类型。 “object”类型目前很难使用

    const useSetState
  • 从网页写入本地磁盘

    我正在开发一个允许多文件下载的 Silverlight 控件 目前我正在尝试了解浏览器的权限模型 假设 在网页上 用户在文本框中输入本地文件夹 c temp 然后用户单击一个按钮 是否可以在 JavaScript 或 Silverlight
  • FlatList 在渲染时调用 `onEndReached`

    这是我的简单的 render 函数category list page 最近我为我的页面添加了分页FlatList所以当用户滚动到底部时查看 onEndReached在某个点被调用 onEndReachedThreshold从底部开始的值长
  • 属性错误:“图形”对象没有属性“节点”

    我有以下 python 代码来构建 knn 图 但出现错误 AttributeError Graph 对象没有属性 node 似乎 nx Graph 没有节点属性 但我不知道应该用它替换什么 import networkx as nx de
  • 通过 Webpack 在 Rails 中安装 jQuery 时未定义 $

    我正在尝试通过 Webpack 在 Rails 6 0 0 rc1 中安装 jQuery 我不确定我缺少什么 但我收到了错误 is not defined尽管能够编译 jQuery 但仍会在浏览器控制台中出现 我添加了 jQueryyarn
  • Tomcat 8 给出 JSP 编译错误

    我使用的是 tomcat 7 刚刚升级到 tomcat 8 但是当我在 tomcat 服务器上运行我的 Web 应用程序时 它给出了这个错误 Stacktrace with root cause org apache jasper Jasp
  • Windows Phone 8.1 尺寸问题

    我在为 Windows Phone 开发应用程序时无法理解尺寸 我知道有3个决心 WVGA 480 800 15 9 WXGA 768 1280 15 9 1 6x scale 720p 720 1280 16 9 1 5x scale 8
  • ToString() 与字符串运算符的类型推断

    注 这个问题和我的有些关系前一个 https stackoverflow com questions 41347374 tostring throws nullreferenceexception for unit value 但实际上从不
  • PHP内置开发服务器的最大并发连接数

    我在使用 php 的内置网络服务器时遇到了一个问题 因为它似乎只允许单个并发连接 我在测试一些并发 ajax 请求时发现了这一点 这些请求似乎都是同时完成的 这不是什么大问题 因为我总是可以启动 apache 这就是我得出上述结论的方式 但
  • GlassFish 需要 Java SE 版本 6。您的 JDK 是版本 0 (Mac)

    我正在 IntelliJ 中使用 GlassFish 做一个项目 它抛出以下错误 GlassFish 需要 Java SE 版本 6 您的 JDK 是版本 0 我跑了glassfish4 bin asadmin start domain在终
  • 分层架构中的实体框架

    我正在使用实体框架的分层架构 这是我到目前为止想到的 除 UI 之外的所有项目都是类库 Entities POCO 实体 完全的执着无知 没有参考其他项目 由 Microsoft 的 ADO Net POCO 实体生成器生成 DAL 带有上