注意:VS2010 / .NET 4,但目前没有SP1 Beta,但是如果SP1中的某些功能解决了这个问题,那么仍然很高兴知道。 :)
我有一个要读取但永远不会写入的特定数据库。我没有在Model的属性中看到任何东西(在EF设计器中查看)以将其标记为只读。
当然,看起来最简单的事情是为生成的ObjectContext子类添加一个局部类(类FooModel:ObjectContext)以覆盖SaveChanges(SaveOptions)并将其抛出(也许连接到SavingChanges并抛出也可以,我还没有) t实际上也尝试过)。那不会禁用变更跟踪,并且AFAICT我必须遍历上下文实例创建中的所有实体集,以将它们全部标记为只读(尽管这是一个性能问题,因此并不像确保更改那样重要)坚持)。
当然,还有其他选项,例如以仅具有读取访问权限的用户身份连接字符串进行连接,但是我想知道从EF设计者/模型/实例的角度来看,对于具有“只读”对象上下文可以使用哪些选项?
最佳答案
只有几种方法可以使模型变为只读状态
DefiningQuery
,则同样适用。 QueryView
的实体是只读的。 QueryView
仅在其他实体上起作用,因此,一般而言,它不能解决您的问题。 您的建议具有用户访问数据库的权限,这似乎是最安全的方法。如果您要禁止保存覆盖
SaveChanges
的更改并抛出类似NotSupportedException
的内容,那么这也是一个不错的解决方案。因为您将仅使用只读实体,所以您还可以使用
MergeOptions.NoTracking
来提高查询性能。关于.net - EFv4模型的只读选项(无更改跟踪,应该抛出SaveChanges)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5044780/