【发布时间】:2010-09-13 20:39:30
【问题描述】:
我正在为一个使用 .NET v4、EF4 和 SQL Server 2008 R2 的新内部应用程序开发项目研究 EF4。迄今为止,我们的小型开发团队很少进行 .NET 开发,并且只演示了 EF 应用程序。我们当前的应用程序使用 DB 应用程序角色来保证安全性,这对我们来说效果很好。
通过阅读和一些基本的实验,我的理解是:
EF 可以根据需要打开和关闭数据库连接。但是,可以手动打开和关闭 EntityConnection 以供 EF ObjectContext 使用。
SQL Server 应用程序角色安全要求在数据库连接上运行 sp_setapprole 以设置应用程序角色上下文。 sp_unsetapprole 可用于将连接恢复到其原始上下文。
默认情况下,数据库连接是池化的。如果连接在返回池之前未恢复到其原始上下文,则将 sp_setapprole 与连接池一起使用可能会出现问题。
如果以上所有内容都正确,那么将 EF4 与 app-roles 一起使用的明显方法是手动打开和关闭 EntityConnection,确保在打开后执行 sp_setapprole,在关闭前执行 sp_unsetapprole。
有更好的方法吗?我最担心的是在没有先调用 sp_unsetapprole 的情况下意外关闭连接。似乎是一个可能不会立即注意到的错误。
【问题讨论】:
标签: entity-framework-4 database-connection connection-pooling