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

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

内容简介:所以这里的情况: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


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

查看所有标签

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

OKR工作法

OKR工作法

克里斯蒂娜•沃特克 (Christina Wodtke) / 明道团队 / 中信出版社 / 2017-9-1 / CNY 42.00

《OKR工作法》讲述了一种风靡硅谷科技企业的全新工作模式。 如何激励不同的团队一起工作,全力以赴去实现一个有挑战性的目标? 硅谷的两个年轻人汉娜和杰克,像很多人一样,在萌生了一个创意后,就走上创业之路。但是,很快他们发现好的想法远远不够,必须还有一套适合的管理方法确保梦想能实现。为了让创业团队生存下来,汉娜和杰克遭受了内心的苦苦挣扎和煎熬。他们患上“新奇事物综合症”,什么都想做,导致无......一起来看看 《OKR工作法》 这本书的介绍吧!

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

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具