为什么实体框架需要 ICollection 来延迟加载?

2024-05-03

我想编写一个丰富的域类,例如

public class Product    
{    
   public IEnumerable<Photo> Photos {get; private set;}    
   public void AddPhoto(){...}    
   public void RemovePhoto(){...}
 }

但是实体框架(V4代码优先方法)需要ICollection类型来延迟加载!上面的代码不再按设计工作,因为客户端可以绕过 AddPhoto / RemovePhoto 方法并直接调用 ICollection 上的 add 方法。不是很好。

public class Product    
{    
   public ICollection<Photo> Photos {get; private set;} //Bad    
   public void AddPhoto(){...}    
   public void RemovePhoto(){...}    
 }

尝试使用 EF4 实现 DDD 确实令人沮丧。为什么他们选择 ICollection 进行延迟加载?

我怎样才能克服这个问题? NHibernate 能否为我提供更好的 DDD 体验?


我想我找到了解决方案...请参阅此处了解更多详细信息:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/47296641-0426-49c2-b048-bf890c6d6af2/ http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/47296641-0426-49c2-b048-bf890c6d6af2/

本质上,您希望保护 ICollection 类型并将其用作公共 IEnumerable 的后备集合

public class Product
{

   // This is a mapped property
   protected virtual ICollection<Photo> _photos { get; set; }

   // This is an un-mapped property that just wraps _photos
   public IEnumerable<Photo> Photos
   {
      get  { return _photos; }
   }

   public void AddPhoto(){...}
   public void RemovePhoto(){...}

} 

为了使延迟加载起作用,类型必须实现 ICollection,并且访问必须是公共的或受保护的。

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

为什么实体框架需要 ICollection 来延迟加载? 的相关文章

  • 使用 UnitofWork 模式的 Rhino 模拟实体框架不起作用

    这是我第一次尝试这样的事情 所以希望这很简单 我创建了一个使用实体框架访问数据库的 WCF 服务 我已经实施了一个工作单元接口 以便我的服务可以使用 EF 同时仍然可测试 这是我的服务 public class ProjectService
  • 数据表 JSF 中的延迟加载

    在我负责的许多项目中 没有什么比数据表中的延迟分页更好的了 JSF 是否有某种魔力 或者我说得对吗 它确实是一个很大的性能问题 如果你看过一些教程 几乎没有人关心惰性分页 假设您在支持 bean 上有 List 并且数据库中有 2000 行
  • AspNetUserLogins 表身份

    AspNetUserLogins 的用途是什么 是存储用户的登录信息吗 然后我如何用该数据更新该表 AspNetUserLogins 的用途是什么 在Asp net Identity中 Identity系统使用AspNetUserLogin
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • 为什么 EF DataBase First 不使用 getdate()?

    我首先使用 EF 4 1 和数据库 示例表 CREATE TABLE dbo Product ID int IDENTITY 1 1 not null Title nvarchar 200 not null CreateDate datet
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 如何让实体框架初始化新创建的实体上的集合?

    我正在尝试用一些测试数据来种子我的数据库IDatabaseIntialiser像这样 protected override void Seed BlogDataContext context
  • 使用 IQueryable 进行单元测试代码

    我被要求为某些功能编写一些单元测试 但坦率地说 我不太确定这样做的必要性或有用性对于这个特殊的一段代码 我绝不试图质疑单元测试的必要性或有用性 所讨论的代码非常简单并且被大量使用 基本上它是 Skip 和 Take 扩展方法的包装 在我看来
  • 是否可以存根实体框架上下文和类来测试数据访问层?

    我熟悉用于测试 ASP NET MVC 应用程序中的控制器和业务逻辑的技术 我们的应用程序中的数据访问集中在松散耦合的特殊服务中 使用接口并通过实体框架与实际数据库一起使用 然而 随着 DAL 变得越来越复杂 隐藏数据库实现细节并为应用程序
  • Dynamic Linq 的执行延迟 IQueryable

    我在用动态链接 https www nuget org packages System Linq Dynamic执行一些查询 抱歉 但这是我唯一的选择 结果 我得到了IQueryable而不是IQueryable
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 学习实体框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 定时任务应该放在哪一层?

    我正在尝试使用分层架构来实现 DDD 应用程序 我有 基础设施层 实现应用程序的技术特定部分的层 领域层 包含领域模型的层 应用层 包含与领域模型交互的干扰的层 接口层 从外部接收事件的层 经典的 3 层 基础设施 架构非常清晰 但我的应用
  • 实体框架服务层更新 POCO

    我正在使用Service Layer gt Repository gt Entity Framework Code First w POCO objects方法 我在更新实体方面遇到了困难 我正在使用 AutoMapper 将域对象映射到视
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 播种多对多数据

    您好 我正在尝试为我的项目创建一些种子 但我在将多对多关系数据播种到数据库时遇到问题 My database看起来像这样 in 教师技能 教师ID and Skill ID当然是他们的表的外键 My seeder看起来像这样 protect
  • 分页错误:“跳过”方法仅支持 LINQ to Entities 中的排序输入。必须在方法“Skip”之前调用方法“OrderBy”

    我正在索引页上的 MVC 中进行分页 在这一行我收到错误 return View employee ToPagedList Page 1 3 这是索引方法 public ActionResult Index string searchBy
  • 如何使用 linq 查询连接两个不同 edmx 中的两个表

    如何使用 linq 查询连接两个不同 edmx 中的两个表 有没有办法同时从 2 个不同的 edmx 进行查询 Thanks Update 根据您的评论 EF 无法解析跨 2 个不同上下文的组合表达式树 如果表中的记录总数相对较小 或者您可
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla

随机推荐

  • jQuery:在方法上取消绑定 jQuery 2.0

    在 jQuery 1 9 中live 已被弃用 因此新方法变为 document on mouseover blahblahfunc 我无法解除 blahblahfunc 的绑定 通过 unbind mouseover mouseout c
  • 如何在PHP中使用curl GET发送原始数据?

    我正在开发 REST API 虽然很容易在 cURL 中为 POST 请求设置原始 JSON 数据 payload json encode array user gt data attach encoded JSON string to t
  • CKFinder 如何在选择图像(文件:选择)时获取尺寸 URL 和尺寸(宽度/高度)?

    我正在使用 CkFinder 3 成功上传图像后 我需要能够在用户单击 选择 按钮后进行检测 文件名 ID url 原始图像的宽度和高度 目前我正在使用files choose但我找不到有关 cb 事件的信息 知道如何解决吗 代码示例将不胜
  • TSConfig JSX:React JSX 与 React

    在将 Typescript 与 React 一起使用时 我们必须指定jsx in compilerOptions in tsconfig json file It has preserve react react native react
  • go:找到模块但不包含包

    我正在尝试安装 go 的网络包 但收到 不包含包错误 终端截图 我咨询过 go 模块 latest 已找到但不包含包 https stackoverflow com questions 62974985 go module latest f
  • 使用 Pandas 滚动差异

    您好 我正在尝试使用 Pandas 滚动函数来计算下表中的滚动差异 我正在尝试生成 每月可用项目 列中的值 但没有得到任何结果 请帮忙 Item Adds Subtracts Month Monthly Available items A
  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 如何分发仅二进制的 go 包

    我想以二进制形式分发包而不包含源代码 我的演示项目目录结构是这样的 demo greet greet go hi hi go hello hello go main go main go package main import fmt de
  • 在提交 Google 表单时找不到具有给定 ID 的项目

    我创建了一个在 Google 表单上运行 onSubmit 的脚本 它应该获取上传到表单的图像的 ID 获取 Blob 形式的图像 然后将其转发到某个电子邮件地址 问题是 有时 大约十分之一 脚本会给出以下错误 例外 找不到具有给定 ID
  • 获取 WSA 错误代码的格式化消息

    我在 win32 C 应用程序中使用winsock2 我将使用 MessageBox 显示可以通过调用 WSAGetLastError 检索的网络错误 我怎样才能做到这一点 我看到 FormatMessage 但我不明白如何使用它 例如 以
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • 创建数据库连接的成本很高吗?

    为什么创建数据库连接的成本很高 比如它到底消耗了什么有限资源 带宽 网络往返 CPU 通常创建成本高昂意味着它会消耗一些资源 例如 cpu 磁盘 io 但在连接的情况下我只能想到同步 确认等所需的时间 您没有说明您要问的数据库是什么 所以这
  • Microsoft Graph API 授权错误:无效受众

    我知道这是一个很长的问题 但如果有人能与我分享他们的想法或经验 我真的很感激 因为我已经解决这个问题几天了 现在正在尝试很多事情 我有一个 ASP Net Core 3 1 Web API 应用程序和一个 ASP NET Core 3 1
  • 对整数进行反直觉测试:63 = (45 x 1.4) = 62

    我写了一个 可能不是特别好 函数来测试一个数字是否是整数 is wholeNumber lt function x x floor x 一般来说 这个函数对我的目的来说效果很好 因为我实际上只考虑用少数小数位测试数字的情况 所以我天真的理解
  • Bixby - 将用户输入从一次操作传递到其他操作

    我正在尝试实现从一个操作读取用户输入并在其他屏幕中读取 例如 user xx Bixby who s there user yyy Bixby yyy who I am able to read user input yyy but una
  • 使用python同时播放两个正弦音

    我正在使用 python 来播放正弦音 音调基于计算机的内部时间 以分钟为单位 但我想根据秒同时播放一个音调 以获得和谐或双重的声音 这就是我到目前为止所拥有的 有人能指出我正确的方向吗 from struct import pack fr
  • 如何在alert()之后给予focus()?

    我有类似的东西
  • 通过 Git/SVN 将前缀 ? 添加到代码中

    怎么加前缀 v VersionNumber使用 Git SVN 高效地访问存储库中的每个文件 我发现 SO 使用这种做法为其存储库中的每个特定文件提供版本号 他们使用SVN 我想知道如何使用 Git 做同样的事情 举几个例子 1 2 在你的
  • 为什么实体框架需要 ICollection 来延迟加载?

    我想编写一个丰富的域类 例如 public class Product public IEnumerable