我应该在插入之前验证相关实体是否存在吗?
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
来破解系统。但这是另一个问题,应该根据授权或类似的东西来检查。
在大多数情况下,我认为数据库中的外键约束就足够了。
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
来破解系统。但这是另一个问题,应该根据授权或类似的东西来检查。
在大多数情况下,我认为数据库中的外键约束就足够了。