gpt4 book ai didi

.net - 只读(无更改跟踪,SaveChanges 应该抛出)EFv4 模型的选项?

转载 作者:行者123 更新时间:2023-12-02 00:34:56 24 4
gpt4 key购买 nike

注意:VS2010/.NET 4,但目前没有 SP1 Beta,但如果 SP1 中的某些内容解决了这个问题,那么了解它仍然很棒。 :)

我有一个特定的数据库,我想从中读取但永远不会写入。我在模型的属性中没有看到任何东西(在 EF 设计器中查看)以将其标记为只读。

当然,看起来最简单的事情是为生成的 ObjectContext 子类(类 FooModel : ObjectContext)添加一个部分类来覆盖 SaveChanges(SaveOptions) 并让它抛出(也许连接到 SavingChanges 并抛出也可以,我实际上也没有尝试过)。这不会禁用更改跟踪,而且 AFAICT 我必须在创建上下文实例时遍历所有实体集,以将它们全部标记为只读(尽管这是一个性能问题,所以不如确保更改不那么重要) t 坚持)。

当然还有其他选项,例如让连接字符串以仅具有读取访问权限的用户身份连接,但我想知道从 EF 设计器/模型/实例的角度来看,有哪些选项可用于具有“只读”对象上下文?

最佳答案

只有几种方法可以让你的模型只读

  • 没有主键的实体是只读的
  • 映射到数据库 View (无主键)的实体是只读的。如果您直接在 SSDL 中使用 DefiningQuery,同样适用。
  • 映射到 CSDL 中的 QueryView 的实体是只读的。 QueryView 仅适用于其他实体之上,因此这通常无法解决您的问题。

您建议允许用户访问数据库的权限看起来是最安全的方式。如果你想禁止保存更改覆盖 SaveChanges 并抛出类似 NotSupportedException 的东西看起来也是一个不错的解决方案。

因为您将只处理只读实体,您还可以使用 MergeOptions.NoTracking 提高查询性能。

关于.net - 只读(无更改跟踪,SaveChanges 应该抛出)EFv4 模型的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com