内容简介:所以这里的情况: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配置文件--指定生成实体类使用实际的表列名作为实体类的属性名
- 命名实体识别技术
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度学习框架PyTorch:入门与实践
陈云 / 电子工业出版社 / 2018-1 / 65
《深度学习框架PyTorch:入门与实践》从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识。结合基础知识和前沿研究,带领读者从零开始完成几个经典有趣的深度学习小项目,包括GAN生成动漫头像、AI滤镜、AI写诗等。《深度学习框架PyTorch:入门与实践》没有简单机械地介绍各个函数接口的使用,而是尝试分门别类、循序渐进地向读者介绍PyTorch的知识,希望读者对PyT......一起来看看 《深度学习框架PyTorch:入门与实践》 这本书的介绍吧!