【问题标题】:Entity Framework 7 Application RoleEntity Framework 7 应用程序角色
【发布时间】:2016-01-16 03:37:47
【问题描述】:
在 EF6 中,可以使用 System.Data.Entity.Infrastructure.Interception 为 MS SQL Server 实现应用程序角色。我在 EF7 库中找不到任何对 Interception 的引用。在 EF7 的路线图中,它将“用于查询和更新的简单拦截机制”列为高优先级。这会提供实现应用角色的功能吗?如果确实如此,那就太好了,但是是否有某些原因必须将应用程序角色隐藏在这种默默无闻的背后?为什么我们不能简单地为应用角色用户名和密码设置 DbContext 属性?
【问题讨论】:
标签:
entity-framework-core
【解决方案1】:
Microsoft 项目经理 Rowan Miller 提供了一些指导来解决问题。总之,向生成的 DbContext 添加一个构造函数,该构造函数打开连接并执行 sp_setapprole。如果您不先打开连接,则连接将在 sp_setapprole 之后关闭,您将在执行后续查询之前失去应用角色。在某些时候,此功能可能会出现在 EF7 拦截库中,但此策略适用于 EF7 RC1。
public partial class YourContext : DbContext
{
public YourContext()
{
try
{
this.Database.OpenConnection();
this.Database.ExecuteSqlCommand("EXEC sp_setapprole appRole, appPsw");
}
catch (Exception exception)
{
...
}
}