内容简介:所以这里的情况:DDD声明您使用存储库获取聚合根,然后使用它来添加/删除其拥有的任何集合.添加很简单,您可以在要添加到的集合中简单调用.Add(Item项).保存时,将新增一行添加到数据库.但是,删除是不同的 – 调用.Remove(Item项)不会从数据库中删除该项,它只是删除外键.所以,是的,它在技术上已经不再是集合的一部分,它仍然在数据库中.
所以这里的情况:
DDD声明您使用存储库获取聚合根,然后使用它来添加/删除其拥有的任何集合.
添加很简单,您可以在要添加到的集合中简单调用.Add(Item项).保存时,将新增一行添加到数据库.但是,删除是不同的 – 调用.Remove(Item项)不会从数据库中删除该项,它只是删除外键.所以,是的,它在技术上已经不再是集合的一部分,它仍然在数据库中.
阅读,唯一的解决方案是使用数据上下文删除它.但根据DDD,域对象不应该知道数据上下文,因此删除将不得不在域之外完成.
这是正确的方法吗?还是离开数据库充满孤儿可以接受(也许运行一个例程来清除它们)?
应该在他的书中.
虽然域对象不允许知道对象上下文,但是IDomainEventHandler是 – 因此我有一个DomainObjectDeletionHandler,在控件返回到我的应用程序层并保存更改之前,会从对象上下文中删除“已删除”对象.
有关更多信息,我已经写了 a blog 关于我的域事件的实现,以及我如何把所有东西挂在一起.
希望有帮助:)
编辑
例如,如果您有一个Order类,其OrderItems集合的类型为OrderItem:
public class Order { // Other stuff public void RemoveOrderItem(int orderItemId) { var orderItemToRemove = OrderItems.First(oi => oi.Id == orderItemId) OrderItems.Remove(orderItemToRemove); DomainEvents.Raise(new OrderItemRemoved(orderItemToRemove)); } }
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/8360239/ef-code-first-how-are-you-meant-to-delete-a-row-from-an-entitys-collection-whi
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- EF架构~FluentValidation实体检验与实体分离了
- 一行一行源码分析清楚AbstractQueuedSynchronizer
- 表单 – 如何使用实体列表(CRUD)从模板中删除实体?
- 一行一行手敲webpack4配置
- MyBatis Generator配置文件--指定生成实体类使用实际的表列名作为实体类的属性名
- 命名实体识别技术
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Book of CSS3
Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95
CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!