2010-12-17 36 views
0

我正在使用存储库模式。实体框架:如何在提交之前检查值是否存在

我有我使用一个服务提交国家资料库。我应该在哪里查看该国是否已经存在于数据库中,我抛出异常?

有没有办法在一个数据库调用做到这一点? (如果不存在,请检查并插入)?如果这是可能的,是否可以在服务层完成? (如果这是你推荐的地方,我会进行检查)。

回答

1

由于多用户并发的,你不能SELECT然后INSERT和得到保证没有问题。因此,由@Coding Gorilla提出的解决方案可能在高并发情况下失败。

你应该把一个UNIQUE指数在适当的DB列和处理(或让表面)数据库异常,如果国家不存在,你会得到。是的,你可以在服务层做到这一点。这只是一个数据库调用,并且不会失败,因为数据库服务器可以保护您免受并发问题的困扰。

+0

你是说让EF抛出错误,只是在服务层中调用Insert?我不必写任何支票? – 2010-12-17 18:49:53

+0

如果违反'UNIQUE'约束,数据库服务器将返回错误。当这种情况发生时,EF将会抛出。 – 2010-12-17 18:57:35

1

是否把这种逻辑在您的服务或您的资料库是有点主观的问题。就我个人而言,如果它不存在,我会进行服务检查并插入,但在尝试执行插入操作之前,也会让您的存储库验证它不存在,这样,您的存储库正在执行一些“逻辑”来防止数据库从充斥着愚蠢。

怎么办?

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