c# – EF代码第一:您是如何在跟踪DDD时从实体的集合中删除一行?

栏目: C# · 发布时间: 6年前

内容简介:所以这里的情况:DDD声明您使用存储库获取聚合根,然后使用它来添加/删除其拥有的任何集合.添加很简单,您可以在要添加到的集合中简单调用.Add(Item项).保存时,将新增一行添加到数据库.但是,删除是不同的 – 调用.Remove(Item项)不会从数据库中删除该项,它只是删除外键.所以,是的,它在技术上已经不再是集合的一部分,它仍然在数据库中.

所以这里的情况:

DDD声明您使用存储库获取聚合根,然后使用它来添加/删除其拥有的任何集合.

添加很简单,您可以在要添加到的集合中简单调用.Add(Item项).保存时,将新增一行添加到数据库.但是,删除是不同的 – 调用.Remove(Item项)不会从数据库中删除该项,它只是删除外键.所以,是的,它在技术上已经不再是集合的一部分,它仍然在数据库中.

阅读,唯一的解决方案是使用数据上下文删除它.但根据DDD,域对象不应该知道数据上下文,因此删除将不得不在域之外完成.

这是正确的方法吗?还是离开数据库充满孤儿可以接受(也许运行一个例程来清除它们)?

我在目前正在使用的应用程序中使用 domain events 解决了这个问题; DDD概念 Eric Evans said

应该在他的书中.

虽然域对象不允许知道对象上下文,但是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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深度学习框架PyTorch:入门与实践

深度学习框架PyTorch:入门与实践

陈云 / 电子工业出版社 / 2018-1 / 65

《深度学习框架PyTorch:入门与实践》从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识。结合基础知识和前沿研究,带领读者从零开始完成几个经典有趣的深度学习小项目,包括GAN生成动漫头像、AI滤镜、AI写诗等。《深度学习框架PyTorch:入门与实践》没有简单机械地介绍各个函数接口的使用,而是尝试分门别类、循序渐进地向读者介绍PyTorch的知识,希望读者对PyT......一起来看看 《深度学习框架PyTorch:入门与实践》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码