Entity framework 实体框架:提交前如何检查值是否存在
我正在使用存储库模式 我有一个使用服务提交的国家/地区存储库。我应该在哪里检查数据库中是否已经存在该国家,我抛出一个异常Entity framework 实体框架:提交前如何检查值是否存在,entity-framework,repository-pattern,Entity Framework,Repository Pattern,我正在使用存储库模式 我有一个使用服务提交的国家/地区存储库。我应该在哪里检查数据库中是否已经存在该国家,我抛出一个异常 有没有一种方法可以在一个数据库调用中实现这一点?(如果不存在,请勾选并插入)?如果这是可能的,可以在服务层中完成吗?(如果这是您建议我进行检查的地方)。是否将这种逻辑放在您的服务或存储库中是一个有点主观的问题。就我个人而言,如果服务不存在,我会进行检查和插入,但在尝试进行插入之前,我也会让您的存储库验证它不存在,这样您的存储库就会强制执行一些“逻辑”,以防止您的数据库充满重复
有没有一种方法可以在一个数据库调用中实现这一点?(如果不存在,请勾选并插入)?如果这是可能的,可以在服务层中完成吗?(如果这是您建议我进行检查的地方)。是否将这种逻辑放在您的服务或存储库中是一个有点主观的问题。就我个人而言,如果服务不存在,我会进行检查和插入,但在尝试进行插入之前,我也会让您的存储库验证它不存在,这样您的存储库就会强制执行一些“逻辑”,以防止您的数据库充满重复 怎么做
public void InsertIfNonExistant(string Country)
{
if(!_myContext.Countries.Any(c=>c.Name == Country))
InsertNewCountry(Country);
}
是否将这种逻辑放在您的服务或存储库中是一个有点主观的问题。就我个人而言,如果服务不存在,我会进行检查和插入,但在尝试进行插入之前,我也会让您的存储库验证它不存在,这样您的存储库就会强制执行一些“逻辑”,以防止您的数据库充满重复 怎么做
public void InsertIfNonExistant(string Country)
{
if(!_myContext.Countries.Any(c=>c.Name == Country))
InsertNewCountry(Country);
}
由于多用户并发,您不能
选择
,然后插入
,并保证不会出现问题。因此@Coding Gorilla提出的解决方案在高并发情况下可能会失败
您应该在相应的DB列上放置一个
唯一的
索引,并处理(或浮出水面)如果国家/地区存在您将得到的DB异常。是的,您可以在服务层中执行此操作。这只是一个DB调用,它永远不会失败,因为DB服务器会保护您免受并发问题的影响。由于多用户并发,您不能选择然后插入,并保证不会出现问题。因此@Coding Gorilla提出的解决方案在高并发情况下可能会失败
您应该在相应的DB列上放置一个唯一的
索引,并处理(或浮出水面)如果国家/地区存在您将得到的DB异常。是的,您可以在服务层中执行此操作。这只是一个DB调用,它永远不会失败,因为DB服务器保护您不受并发问题的影响。您是说让EF抛出错误,只调用服务层中的Insert?我不必写任何检查?如果违反唯一约束,DB服务器将返回错误。当这种情况发生时,EF将抛出。您是说让EF抛出错误,然后只调用服务层中的Insert吗?我不必写任何检查?如果违反唯一约束,DB服务器将返回错误。发生这种情况时,EF将抛出。