我使用的是存储库模式。
我有一个国家的存储库,我正在使用一个服务来提交。我应该将检查放在哪里,以查看数据库中是否已经存在该国家/地区,我抛出一个异常?
有没有一种方法可以在一次数据库调用中做到这一点?(如果不存在,请选中并插入)?如果这是可能的,它能在服务层完成吗?(如果这是您建议我做检查的地方)。
发布于 2010-12-18 02:28:48
由于多用户并发,您不能SELECT然后INSERT,并保证不会出现问题。因此,@Coding Gorilla提出的解决方案在高并发情况下可能会失败。
您应该将UNIQUE索引放在适当的DB列上,并处理(或让它浮出水面)如果国家/地区存在就会出现的DB异常。是的,您可以在服务层中执行此操作。这只是一次DB调用,它永远不会失败,因为DB服务器可以保护您免受并发问题的影响。
发布于 2010-12-18 02:26:59
是否将这种逻辑放在您的服务或存储库中是一个有点主观的问题。就我个人而言,我会检查并插入服务,如果它不存在,但也会让你的存储库在尝试插入之前验证它不存在,这样你的存储库就会强制执行一些“逻辑”,以防止你的数据库充满了重复数据。
该怎么做呢?
public void InsertIfNonExistant(string Country)
{
if(!_myContext.Countries.Any(c=>c.Name == Country))
InsertNewCountry(Country);
}https://stackoverflow.com/questions/4473576
复制相似问题