我目前正在创建一个从许多不同数据源中提取数据的应用程序 - 其中大多数是开发数据库,但有些是实时的(我知道这很糟糕,但它完全不受我的控制)。
我想保护自己不要对这些实时数据库进行修改,因此我有兴趣将实体设为只读。
我的研究告诉我这是不可能的,但我预计现在可以使用功能更改或解决方法。有没有人实现这个目标?
答案 0 :(得分:8)
我认为最好将限制放在数据库中而不是应用程序中。在实时数据库中创建一个单独的用户,该用户是data_reader
角色的成员。这将只提供对数据库的读访问权。
如果您已经调整了服务器上的安全设置和角色,则必须详细检查,但默认情况下data_reader
会这样做。
一种简单的方法是覆盖这些数据库的数据上下文的SaveChanges()
方法:
public override int SaveChanges()
{
throw new AccessViolationException(
"Don't mess with a live database during test");
}