【问题标题】:Can I use ORM (EF or nHibernate) in Client side application without hampering performance我可以在客户端应用程序中使用 ORM(EF 或 nHibernate)而不影响性能吗
【发布时间】:2012-02-28 19:35:48
【问题描述】:

我正在开发 WPF 客户端应用程序。我从未见过有人在客户端使用 ORM。

我在这里对在客户端与服务器应用程序中使用 ORM 进行一些分析。

  1. 默认情况下它是惰性的。这意味着,直到查询第一次执行之前什么都没有发生,但是在该查询被缓存之后。现在可以在服务器应用程序中理解这点,但是客户端经常启动,所以我可以在客户端应用程序中使用预加载吗?

  2. 如果dll被篡改,黑客可以立即看到所有数据库结构,是否容易找到数据?

  3. 在客户端使用 ORM 时还有其他影响吗?

谢谢, 奥姆卡尔

【问题讨论】:

    标签: c# entity-framework nhibernate c#-4.0 orm


    【解决方案1】:

    1) EF 和 nhibernate 都可以设置为 eager 2) nto 篡改了 dll,但两者都具有管道类型设计,因此可以将代码插入到管道中 - 例如 EF/Nhibernate 分析器执行此操作 3) 客户端应该没有那么不同——我们用过EF、服务器/客户端并没有发现差异

    【讨论】:

    • 谢谢。在客户端使用 ORM 有什么好处?
    • 主要是开发速度,列名拼写错误没有运行时错误,强类型转换和智能感知。数据类型和约束的客户端验证。如果您已经学习了 LINQ,它会非常棒并且您可以使用它(不再推荐使用 LINQ to SQL - 但 LINQ to EF/Nhibernate 很酷)
    • O,如果您将字符串与 Ui 元素而不是参数化查询连接起来,它们可以防止客户端应用程序发生 sql 注入攻击 - 并不是说​​您只是进行观察:-)
    • 没问题 - 如果你没有得到更好的答案,那么请接受我的帖子作为答案,因为我正在追逐积分 - 办公室竞争 :-)
    • 如果您选择使用 EF,那么从 EF 4.1 开始,WPF 就有一个非常不错的数据绑定故事。 DbSet.Local 属性返回一个 ObservableCollection,它与 WPF 数据绑定很好地交互。看到这个blogs.msdn.com/b/adonet/archive/2011/03/08/…
    【解决方案2】:

    我们将它用于我们的富客户端应用程序并且没有太多问题。您必须稍微改变您的想法 - 但我们真的很喜欢模型类(而不是使用手工制作的 sql)。

    • 我真的会过度考虑您对急切加载的看法。我会尝试使用延迟加载来开发应用程序,如果您遇到问题,请尝试更改为急切加载。制作“查看数据对象”并将 db 实体映射到这可能有助于解决延迟加载问题(Ayende Rahien 写了很多关于这些东西的文章 - 你可以查看他的博客:http://ayende.com/blog - 一个好的入门可能是他的 MSDN 文章 http://msdn.microsoft.com/en-us/magazine/ee819139.aspx )
    • 被篡改的 DLL - 我对这一点真的没有意见
    • 其他含义 - 您必须考虑会话管理,因为它不像服务器端应用程序那么容易 - 这对我们来说是最大的变化。但另一方面,您可以摆脱“已经有一个与此连接关联的数据读取器”的问题。

    整个会话管理一开始可能会让人不知所措,所以我认为你应该从一个好的结构开始——就像 Ayende 的文章中展示的那样。如果你不喜欢这种方法,你可以尝试像 Dapper 这样的“瘦” ORM:http://code.google.com/p/dapper-dot-net/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2012-10-09
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多