如何解决将FK约束异常与EF Core中的其他数据库异常区分开来吗?
我有一个API(.NET Core Web API
),其中包含许多POST
方法,这些方法在数据有效载荷中需要外键ID。如果数据库中不存在这样的FK,我想抛出BadRequest 400状态,如果数据库端没有其他工作,我想抛出500状态。 如何区分FK约束异常与其他数据库异常?
这个问题有一个陷阱。在使用EF Core
时,我不想依赖特定的数据库提供程序(在生产中,我使用Postgresql
,而在集成测试中,我使用的是In-Memory SQLite
)。
这是我的解决方案,但是我不确定它是否完美: 如果该方法的数据有效载荷需要FK约束ID,则在更新数据库之前,我基本上会检查数据库中是否存在此类实体。如果不是,则抛出自定义异常,该异常会在中间件中捕获,因此如果FK ID无效,API响应将始终相同。
您可能会看到,这有点悲观。我想知道是否有一种乐观的方法,所以信任数据库,让它在数据库中失败,但是当它失败时,区分API客户端产生的错误(例如错误的ID),并返回400而不是500。>
感谢帮助!
编辑:
仅作澄清。我不是在说URL中错误的FK ID。我说的是POST
方法,例如以下请求:
URL:
/api/items
数据(json):
{ "itemName": "Foo","addressId": 999999 <--- doesn't exists }
现在,在添加项目之前,我正在检查地址999999是否存在。我不确定这是否是个好习惯。我很好奇我是否可以让数据库失败并在中间件中捕获“错误的FK id”异常。但是问题是,不同的SQL数据库引擎会引发不同的异常。因此,这对我来说是个问题,因为我使用SQLite inMemory
进行集成测试,而使用Postgresql
进行生产。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。