我应该在插入之前验证相关实体是否存在吗?

Should i validate if related entity exists before insert?

class Customer
{
    public int Id { get; set; }
}

class Sale
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
}

class SaleService
{

    public void NewSale(Sale sale)
    {
        //Should i validate if Customer exists by sale.CustomerId before call save?

        saleRepository.InsertOrUpdate(sale);
    }
}

我正在使用领域驱动设计和 Entity Framework。 我应该在调用保存之前通过 sale.CustomerId 验证客户是否存在吗?

我通常不那样做。通常,这些信息来自之前 被加载 的客户端(它存在)。但是,有些情况下 CustomerId 在您更新数据库时丢失。

  • 由于很多用户同时访问系统的并发性。但是这种情况应该有选择地使用乐观并发控制(版本)来解决。我们通常不会在所有情况下都尝试处理并发,因为这样做几乎是不可能的,而且这样做也会带来性能问题、复杂性等副作用……我们只关注系统中一些会导致问题的关键代码如果存在并发问题。

  • 客户端试图通过发送不适当的 CustomerId 来破解系统。但这是另一个问题,应该根据授权或类似的东西来检查。

在大多数情况下,我认为数据库中的外键约束就足够了。