领域驱动设计 (Linq to SQL) - 如何删除聚合的某些部分?

2024-05-16

我似乎对整个 DDD\LinqToSql 业务感到有点困惑。我正在使用 POCOS 和 linq to sql 构建一个系统,并且我有聚合根的存储库。 因此,例如,如果您有 Order->OrderLine 类,那么您就有了 Order 的存储库,但没有 OrderLine,因为 Order 是聚合的根。存储库有删除Order的delete方法,但是如何删除OrderLines呢? 您可能认为您有一个名为RemoveOrderLine 的Order 方法,该方法从OrderLines 集合中删除该行,但它还需要从底层l2s 表中删除OrderLine。由于没有 OrderLine 存储库,您该怎么做?

也许有专门的公共存储库用于查询域对象实际用来删除聚合中内容的根和内部通用存储库?

public class OrderRepository : Repository<Order> {
    public Order GetOrderByWhatever();
}

public class Order {
    public List<OrderLines> Lines {get; set;} //Will return a readonly list
    public RemoveLine(OrderLine line) {
        Lines.Remove(line);
        //************* NOW WHAT? *************//
        //(new Repository<OrderLine>(uow)).Delete(line) Perhaps??
        // But now we have to pass in the UOW and object is not persistent ignorant. AAGH!
    }
}

我很想知道其他人做了什么,因为我不能是唯一一个为此苦苦挣扎的人……我希望……谢谢


您可以在订单上调用RemoveOrderLine,从而调用相关逻辑。这不包括对其持久版本进行更改。

稍后,您在存储库上调用保存/更新方法,该方法接收修改后的订单。具体的挑战在于了解域对象中发生了什么变化,其中有几个选项(我确信比我列出的要多):

  • 让域对象跟踪更改,其中包括跟踪需要从订单行中删除 x 的情况。类似于实体跟踪的东西也可能被排除在外。
  • 加载持久版本。在存储库中拥有可识别持久版本和内存版本之间差异的代码,并运行更改。
  • 加载持久版本。在根聚合中包含代码,可以让您了解给定原始根聚合的差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

领域驱动设计 (Linq to SQL) - 如何删除聚合的某些部分? 的相关文章

  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 如何使用 Spring Crud/Jpa Repository 实现 DDD

    我想通过使用 Spring 实现 DDD 来创建一个应用程序 假设我有一个业务实体 Customer 和一个接口 CustomerRepository 由于春天提供了CrudRepository and JpaRepository默认情况下
  • 当附加触发器时,Linq-to-sql 插入和更新失败

    我最近在 linq to sql 方面遇到了一些问题 问题在于 当我们将触发器附加到事件时 它 认为 插入和更新失败 一个例子可以是一行 当一行被更改时 附加一个触发器将 LastUpdated 冒号设置为当前时间 这将导致 linq to
  • LINQ to SQL 投影:Func 与 Inline

    在使用 Func 的 LINQ to SQL 查询中使用投影时 我发现一些意外行为 示例代码比文字更能解释 使用投影的基本 L2S lambda 查询 db Entities Select e gt new DTO e Value 它会转换
  • 具有条件连接和非匿名返回的 LINQ 查询

    我有一个针对 SQL Server 数据库的 LINQ 查询 该查询将每行的数据写入一个对象Person 在某些情况下 我想加入其他表并添加更多字段Person对象 同时利用 LINQ 延迟加载 The Person类看起来像这样 publ
  • 如何使用 Linq to Sql 修剪值?

    在数据库中 我有一个名为 联系人 的表 名字和其他此类字符串字段设计为使用 Char 数据类型 不是我的数据库设计 我的对象 Contact 映射到属性中的字符串类型 如果我想做一个简单的测试 通过 id 检索 Contact 对象 我会这
  • 将属性名称作为字符串传递到方法中 .NET

    我正在将 LINQ to SQL 用于 NET MVC 应用程序 在我的数据库中 我有一堆包含 Y 或 N 值的列 我正在尝试编写一个通用方法 该方法将返回数据库中的所有记录columnName Y 到目前为止我已经得到了这个 public
  • 与常规 SQL 查询不同,为什么“linq to sql”查询以 FROM 关键字开头?

    为什么 linq to sql 查询以FROM与常规 SQL 查询不同的关键字 LINQ 模仿Logical Query processing在 SQL 中你有 8 SELECT 9 DISTINCT 11 TOP 1 FROM 2 ON
  • 如何在此 MSDN 示例中使用 Order By

    我正在尝试弄清楚如何使用这个 orderBy 参数 我不确定我应该传递什么 http www asp net mvc tutorials getting started with ef using mvc implementing the
  • 在域驱动设计中设置模型属性默认值的最佳实践?

    在 DDD 中为新实体设置默认属性的最佳方法是什么 另外 为复杂属性 例如集合 设置默认状态的最佳方法是什么 我的感觉是默认值应该在模型本身中 因为它们是业务规则的一种形式 默认情况下 我们希望 X 是 Y 和 Z 并且域代表业务 通过这种
  • DDD 哪个是根聚合根?

    许多诸如订单和订单行之类的示例都是有意义的 例如 Order is an AR其中包含OrderLines Customer is an AR其中包含Orders 问题是 什么是AR其中包含Customer 我想它可能是 商店 之类的东西
  • EF 6:映射复杂类型集合?

    EF 6 代码优先 是否支持复杂类型集合 值对象集合 映射 我知道它支持复杂类型 但还没有找到我们拥有复杂类型集合的示例 例如 假设您有一个名为 Student 的实体 其中包含联系人集合 对于 NH 我可以简单地说 Student 有一个
  • LINQ2SQL:如何实现通用最大字符串长度验证?

    LINQ2SQL 中的一个常见问题是 虽然 NET 字符串允许为其变量分配任意长度 但您的数据库可能具有特定的最大长度约束 如 VARCHAR 5 这将导致 SQL 错误消息 字符串或二进制数据将被截断 这是非常没有帮助的 因为它不会告诉您
  • 丰富的领域模型和 ORM

    Martin Fowler 认为贫血领域模型是一种反模式 将持久性模型作为域模型进行滚动似乎也严重偏离 因为对象关系阻抗不匹配 http en wikipedia org wiki Object Relational impedance m
  • ASP MVC:何时调用 IController Dispose()?

    我正在对我的一个较大的 MVC 应用程序进行大规模重构 速度调整 它已经部署到生产环境几个月了 我开始在连接池中等待连接超时 我已将问题追溯到连接未正确处理的情况 鉴于此 我对我的基本控制器进行了以下更改 public class MyBa
  • 使用“NOT IN”的 LINQ to SQL 查询

    可以使用 LINQ to SQL 查询NOT IN 例如 SELECT au lname 声明 FROM 作者 WHERE 声明 NOT IN CA IN MD List
  • 使用 Linq to SQL 进行 NOLOCK

    是否有可能让 Linq2Sql 在其 SQL 中发出 NOLOCK 如果是这样 怎么办 是的 所以这是条目来自我的博客 http www madprops org blog linq to sql and nolock hints NOLO
  • 服务层设计。将事物放入服务层的原因

    我有一些与设计相关的问题 should service layer interfaces居住在一个domain layer 例如user service 将代码部分移动到单独层的主要原因是什么 should service layer居住在
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 使用其他聚合中的数据检查命令的有效性

    我目前正在开发我的第一个更大的 DDD 应用程序 目前来说 它运行得很好 但我们从早期就陷入了一个让我无法停止思考的问题 在我们的一些聚合中 我们保留对另一个聚合根的引用 这对于整个应用程序非常重要 基于它们的 ID 因此不存在硬引用 删除

随机推荐

  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 重写 getPreferredSize() 会破坏 LSP

    我总是在这个压倒一切的网站上看到建议getPreferredSize 而不是使用setPreferredSize 例如 如前面的线程所示 对于固定大小的组件 使用重写 getPreferredSize 而不是使用 setPreferredS
  • Java 卡布局。多张卡中的一个组件

    一个组件 例如JLabel 在多张卡中使用CardLayout 目前看来该组件仅出现在它添加到的最后一张卡上 如果有办法做到这一点 我应该吗 这是不好的做法吗 或者有其他选择吗 你是对的 它只出现在 添加到的最后一张卡 中 但这与CardL
  • cameraOverlayView 防止使用 allowedEditing 进行编辑

    在我的应用程序中 使用以下行在拍摄照片后对其进行编辑 移动和缩放 效果很好 imagePicker setAllowsEditing YES 但如果我还使用cameraOverlayView 则编辑模式将不再起作用 屏幕出现 但平移和捏合手
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 如何在 Jenkins 声明式管道中设置 PATH

    在 Jenkins 脚本化管道中 您可以像这样设置 PATH 环境变量 node git url https github com jglick simple maven project with tests git withEnv PAT
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 如何使用 UNIX shell 计算字母在文本文件中出现的次数?

    我有几个文本文件 我想计算每个字母在每个文件中出现的次数 具体来说 我想使用 UNIX shell 来执行此操作 形式为 cat file 做东西 有没有办法让 wc 命令来执行此操作 grep char o filename wc l
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • dplyr 中的标准评估:全局环境中的函数出现“无法找到函数”错误

    我试图在 dplyr 中对全局环境中的函数使用标准评估 但出现 无法找到函数 错误 这是一些代码 create data frame df lt data frame x rnorm 10 y rnorm 10 define arbitra
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • Android 中带有透明背景的 ImageButton [重复]

    这个问题在这里已经有答案了 我已经按照这篇文章在android中制作ImageButton 安卓图像按钮 https stackoverflow com questions 2283444 android image button 图像出现
  • 如何从列表创建多维数组?

    我在 MySQL 中有一个带有父 ID 的类别列表 如何从列表中创建 PHP 数组 ID Category Parent ID 1 Car NULL 2 Education NULL 3 Mathematics 2 4 Physics 2
  • Resharper 代码清理在 Unityconfig.cs 上不可用

    我在用着ReSharper 2016 3 2 它工作得很好 但我遇到了一个奇怪的问题 code cleanup该功能不适用于UnityConfig cs The Refactor上下文菜单被禁用 清理热键显示以下消息 组合键 Ctrl E
  • 如何设置yaml-cpp节点样式?

    我有一个 Vector3 类 class vector3 float x y z node x vector3 x node y vector3 y node z vector3 z 结果是 x 0 y 0 z 0 我希望结果是 x 0 y
  • 使用 VCR 过滤敏感数据

    我正在使用 VCR gem 记录 http 交互并在将来重播它们 我想过滤掉 uri 请求中的实际密码值 以下是 uri 的示例 http services somesite com Services asmx Cabins Usernam
  • Haskell Stack 从 github 安装包依赖项

    是否可以使用 Haskell 堆栈从 github 安装软件包的版本 例如在一个 cabal or a stack yaml文件 如何在 git repo branch revision 上指向依赖项 对于堆栈 The 的文档stack y
  • Cassandra CAS INSERT 对于具有毫秒延迟的请求超时

    我们正在对 cassandra 集群 3 个节点 复制因子 3 进行负载测试 并开始偶尔接收到写入超时异常对于一张表上的 CAS 插入操作 CREATE TABLE users by identity account ascii domai
  • 领域驱动设计 (Linq to SQL) - 如何删除聚合的某些部分?

    我似乎对整个 DDD LinqToSql 业务感到有点困惑 我正在使用 POCOS 和 linq to sql 构建一个系统 并且我有聚合根的存储库 因此 例如 如果您有 Order gt OrderLine 类 那么您就有了 Order