我正在使用存储库模式。
我有一个国家/地区存储库,我正在使用服务提交。我应该在哪里检查数据库中是否已经存在该国家/地区,我会抛出异常?
有没有办法在一个数据库调用中执行此操作? (检查并插入,如果不存在)?如果可以,可以在服务层完成吗? (如果那是你建议我做的检查)。
答案 0 :(得分:1)
是否将这种逻辑放在您的服务或存储库中是一个主观问题。就个人而言,如果它不存在,我会进行服务检查和插入,但是在尝试进行插入之前,还要让你的存储库验证它不存在,这样你的存储库就强制执行一些“逻辑”以防止你的数据库从充满欺骗。
怎么做?
public void InsertIfNonExistant(string Country)
{
if(!_myContext.Countries.Any(c=>c.Name == Country))
InsertNewCountry(Country);
}
答案 1 :(得分:1)
由于多用户并发,您不能SELECT
然后INSERT
并且保证没有问题。所以@Coding Gorilla提出的解决方案可能会在高并发情况下失败。
您应该在相应的数据库列上放置一个UNIQUE
索引,并处理(或让表面)数据库异常(如果该国家/地区存在)。是的,您可以在服务层执行此操作。这只是一个数据库调用,它永远不会失败,因为数据库服务器可以保护您免受并发问题的影响。