【发布时间】:2014-03-25 00:41:03
【问题描述】:
我想知道是否有人找到了完全禁止 EF 使用生成的 SQL 或完全禁止 EF 执行即席 SQL 语句的方法。换一种说法,我想强制实体框架仅使用在我的 .edmx 文件中定义为映射的存储过程与数据库交互。
我为什么要做这样的事情?
我在一个应用程序中使用 EF 作为我的 ORM,该应用程序使用仅存储过程(由于安全要求)与数据库交互。有时很容易忘记在我的 .edmx 文件中定义存储过程映射。发生这种情况时,EF 将尝试在运行时生成 ad-hoc SQL - 这会导致运行时安全错误,因为 EF 将尝试针对禁止 ad-hoc SQL 执行的数据库执行此生成的 SQL。
由于我的大部分开发工作和单元测试都是使用确实启用了临时 SQL 执行权限的用户帐户完成的,因此这些运行时安全错误经常被遗漏。
我在这里考虑过的一些选项:
切换到另一个 ORM - 也许还有另一个 ORM 可以更好地支持存储过程,但是到目前为止我还没有真正看到更好的选择。
在我用于开发的用户帐户的 SQL 中禁用临时 SQL 执行。这是有问题的,因为我的单元测试在某些情况下需要使用临时 SQL 将测试数据等注入数据库。这也是有问题的,因为当我编写代码时,能够对数据库执行 ad-hoc sql 语句(操作数据、注入测试数据等)非常方便,并且禁用 ad-hoc SQL 执行将意味着不断切换用户或失去这种能力。
以某种方式禁用 EF 中的临时 SQL 生成。这似乎是迄今为止最好的选择,因为我可以继续开发,并使用具有 SQL 执行权限的用户进行测试 - 如果我忘记了存储过程映射,我的测试将失败,或者我会收到运行时错误。
【问题讨论】:
标签: entity-framework