我想知道是否有人找到了一种方法来完全禁用EF使用生成的SQL或完全禁止EF执行ad-hoc SQL语句。换句话说,我想使用在我的.edmx文件中定义为映射的存储过程强制实体框架仅与数据库交互。
为什么我要做这样的事情?
我在使用仅存储过程(由于安全要求)与数据库交互的应用程序中使用EF作为我的ORM。偶尔忘记在我的.edmx文件中定义存储过程映射非常容易。发生这种情况时,EF将尝试在运行时生成临时SQL - 这会导致运行时安全性错误,因为EF将尝试针对禁止临时SQL执行的数据库执行此生成的SQL。
由于我的大多数开发工作和单元测试都是使用 启用了临时SQL执行权限的用户帐户完成的,因此通常会错过这些运行时安全错误。
我在这里考虑的一些选项:
切换到另一个ORM - 可能还有另一个ORM更好地支持存储过程,但到目前为止,我还没有真正看到更好的替代方案。
在我的用户帐户上禁用SQL中的临时SQL执行,我将其用于开发。这是有问题的,因为我的单元测试在某些情况下需要使用临时SQL将测试数据等注入数据库。这也是有问题的,因为当我编写代码时,能够对数据库执行ad-hoc sql语句(操纵数据,注入测试数据等)和禁用它们非常方便临时SQL执行意味着不断在用户之间切换或失去这种能力。
以某种方式禁用EF中的ad-hoc SQL生成。这似乎是迄今为止最好的选择,因为我可以继续开发,并使用具有SQL执行权限的用户进行测试 - 如果我忘记了存储过程映射,我的测试将失败,或者我会收到运行时错误。< / p>
答案 0 :(得分:1)
我要做的是将单元测试本身作为与开发用户不同的用户运行,开发用户没有ad-hoc权限,而是以开发用户的身份运行单元测试的设置和拆除步骤。
它为您提供了两全其美的功能,在与部署相同的环境中进行单元测试,以及设置所述测试的管理员权限。