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

时间:2015-06-15 12:36:56

标签: c# entity-framework domain-driven-design

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);
    }
}

我正在使用域驱动设计和实体框架。 我是否应该通过sale.CustomerId验证客户是否存在于保存之前?

1 个答案:

答案 0 :(得分:2)

我通常不这样做。通常情况下,这些信息来自之前(已存在)已加载的客户端。但是,有些情况下更新数据库时会遗漏CustomerId

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

  • 客户端尝试通过发送不合适的CustomerId来破解系统。但这是另一个应根据授权或类似情况进行检查的问题。

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