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


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

查看所有标签

猜你喜欢:

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

算法的陷阱

算法的陷阱

阿里尔•扎拉奇 (Ariel Ezrachi)、莫里斯•E. 斯图克 (Maurice E. Stucke) / 余潇 / 中信出版社 / 2018-5-1 / CNY 69.00

互联网的存在令追求物美价廉的消费者与来自世界各地的商品只有轻点几下鼠标的距离。这诚然是一个伟大的科技进步,但却也是一个发人深思的商业现象。本书中,作者扎拉奇与斯图克将引领我们对由应用程序支持的互联网商务做出更深入的检视。虽然从表面上看来,消费者确是互联网商务兴盛繁荣过程中的获益者,可精妙的算法与数据运算同样也改变了市场竞争的本质,并且这种改变也非总能带来积极意义。 首当其冲地,危机潜伏于计算......一起来看看 《算法的陷阱》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具