c# - 更新数据库集合的最佳策略

标签 c# collections domain-driven-design

我们正在使用 C# 4 和 SQL Server 2008 R2 开发一个系统,并遵循领域驱动设计原则。没有使用 ORM。在某些情况下,我们有一个实体持有另一个实体的集合,例如:

public class Project
{
    public IdCollection ParticipantUsers
    {
        get
        {
            //...
        }
    }

    public void AddParticipantUser(Id idUser)
    {
        //...
    }

    public void RemoveParticipantUser(Id idUser)
    {
        //...
    }
}

ProjectParticipantUsers 属性返回参与其中的用户 ID 的集合。 AddParticipantUserRemoveParticipantUser 方法,您明白了。

我们发现的问题如下。当一个项目实例被发送到存储库以在数据库上进行更新时,id 的 ParticipantUsers 集合可能已经从上次检索时发生了变化:一些 id 可能已经被添加,一些可能已经已被删除,有些可能完全相同。我们可以使用蛮力方法从数据库中删除该项目的所有参与用户,然后重新插入当前用户,但我想探索更好的方法。

您能想到什么更好的方法,允许我只插入那些已添加的 ID,删除那些已删除的 ID,并保留那些仍然存在于集合中的 ID?

最佳答案

实际上,我认为删除-重新插入方法比任何基于比较的解决方案都要好。

首先,它易于实现。

其次,它避免了再次获取数据进行比较。

您能否进一步解释为什么不推荐这种方法,也许我没听懂。

关于c# - 更新数据库集合的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17568292/

相关文章:

domain-driven-design - 在 CQRS 中,如何将聚合上允许的方法列表传达给 UI?

c# - 影响我域的 Entity Framework

c# - 使用 RsaProtectedConfigurationProvider 加密/解密 app.config 部分

c# - 使用 MVVMLight 5.0 的 ASP.NET 站点中出现 INotifyPropertyChanged、System.ObjectModel 错误

java - 遍历 EnumMap#entrySet

java - 列表默认容量是多少?列表可以存储多少个元素?

c# - Elasticsearch搜索不区分大小写的字段的确切值

c# - 我应该使用哪一个? decimal.Add() 或 "+"

java - 在Java中声明具有初始容量的链表

oop - 领域驱动设计 : Is a Subdomain a class?