实体框架:如何在提交之前检查值是否存在

时间:2010-12-17 18:19:46

标签: entity-framework repository-pattern

我正在使用存储库模式。

我有一个国家/地区存储库,我正在使用服务提交。我应该在哪里检查数据库中是否已经存在该国家/地区,我会抛出异常?

有没有办法在一个数据库调用中执行此操作? (检查并插入,如果不存在)?如果可以,可以在服务层完成吗? (如果那是你建议我做的检查)。

2 个答案:

答案 0 :(得分:1)

是否将这种逻辑放在您的服务或存储库中是一个主观问题。就个人而言,如果它不存在,我会进行服务检查和插入,但是在尝试进行插入之前,还要让你的存储库验证它不存在,这样你的存储库就强制执行一些“逻辑”以防止你的数据库从充满欺骗。

怎么做?

public void InsertIfNonExistant(string Country)
{
   if(!_myContext.Countries.Any(c=>c.Name == Country))
      InsertNewCountry(Country);
}

答案 1 :(得分:1)

由于多用户并发,您不能SELECT然后INSERT并且保证没有问题。所以@Coding Gorilla提出的解决方案可能会在高并发情况下失败。

您应该在相应的数据库列上放置一个UNIQUE索引,并处理(或让表面)数据库异常(如果该国家/地区存在)。是的,您可以在服务层执行此操作。这只是一个数据库调用,它永远不会失败,因为数据库服务器可以保护您免受并发问题的影响。