C# 我可以在客户端应用程序中使用ORM(EF或nHibernate)而不影响性能吗

C# 我可以在客户端应用程序中使用ORM(EF或nHibernate)而不影响性能吗,c#,entity-framework,nhibernate,c#-4.0,orm,C#,Entity Framework,Nhibernate,C# 4.0,Orm,我正在处理WPF客户端应用程序。我从未见过有人在客户端使用ORM 我在这里对在客户机和服务器应用程序中使用ORM进行一些分析 默认情况下,它是懒惰的。这意味着,在第一次执行查询之前,除了缓存该查询之外,什么也没有发生。现在,这可以在服务器应用程序中理解,但客户端经常启动,所以我可以在客户端应用程序中使用即时加载吗 如果dll被篡改,黑客会很容易找到数据,因为他可以立即看到所有的数据库结构吗 在客户端使用ORM时还有什么其他含义吗 谢谢, Omkar1)EF和nhibernate都可以设置为 2)

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

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

  • 默认情况下,它是懒惰的。这意味着,在第一次执行查询之前,除了缓存该查询之外,什么也没有发生。现在,这可以在服务器应用程序中理解,但客户端经常启动,所以我可以在客户端应用程序中使用即时加载吗

  • 如果dll被篡改,黑客会很容易找到数据,因为他可以立即看到所有的数据库结构吗

  • 在客户端使用ORM时还有什么其他含义吗

  • 谢谢, Omkar

    1)EF和nhibernate都可以设置为 2) nto篡改了dll,但两者都有pipline类型设计,因此可以将代码插入pipline中——例如EF/Nhibernate分析器就是这样做的 3) 客户端不应该如此不同-我们使用了EF、服务器/客户端,没有发现任何差异

    1)EF和nhibernate都可以设置为 2) nto篡改了dll,但两者都有pipline类型设计,因此可以将代码插入pipline中——例如EF/Nhibernate分析器就是这样做的
    3) 客户端不应该如此不同-我们使用了EF、服务器/客户端,没有发现任何差异

    我们将其用于富客户端应用程序,并且没有太多问题。您必须稍微改变一下想法,但我们确实喜欢模型类(而不是使用手工编制的sql)

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

    整个会话管理在一开始可能会非常复杂,所以我认为您应该从一个好的结构开始,就像Ayende的文章中所示的那样。如果您不喜欢这种方法,您可以尝试一种“瘦”ORM,如Dapper:

    我们将其用于富客户机应用程序,并且没有太多问题。您必须稍微改变一下想法,但我们确实喜欢模型类(而不是使用手工编制的sql)

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

    整个会话管理在一开始可能会非常复杂,所以我认为您应该从一个好的结构开始,就像Ayende的文章中所示的那样。如果您不喜欢这种方法,您可以尝试像Dapper这样的“瘦”ORM:

    谢谢。在客户端使用ORM有什么优势吗?主要是开发速度快,没有错误拼写列名的运行时错误,强类型转换和IntelliSense。数据类型和约束的客户端验证。如果您已经学习了LINQ,那么它会运行,您可以使用它(不再推荐使用LINQ到SQL,但是LINQ到EF/Nhibernate很酷)O并且它们可以防止sql注入攻击,这种攻击可能发生在客户端应用程序中,如果您使用Ui元素而不是参数化查询来关联字符串,则可能发生在客户端应用程序中-不是说您只进行观察:-)没有问题-如果您没有得到更好的答案,然后接受我的帖子作为答案,因为我在追求积分-办公室竞争:-)如果你选择使用EF,那么从EF4.1开始,WPF有一个非常好的数据绑定故事。Local属性返回一个ObservableCollection,它与WPF数据绑定进行了非常好的交互。看看这个,谢谢。在客户端使用ORM有什么优势吗?主要是开发速度快,没有错误拼写列名的运行时错误,强类型转换和IntelliSense。数据类型和约束的客户端验证。如果您已经学习了LINQ,那么它会运行,您可以使用它(不再推荐使用LINQ到SQL,但是LINQ到EF/Nhibernate很酷)O并且它们可以防止sql注入攻击,这种攻击可能发生在客户端应用程序中,如果您使用Ui元素而不是参数化查询来关联字符串,则可能发生在客户端应用程序中-不是说您只进行观察:-)没有问题-如果您没有得到更好的答案,然后接受我的帖子作为答案,因为我在追求积分-办公室竞争:-)如果你选择使用EF,那么从EF4.1开始,WPF有一个非常好的数据绑定故事。Local属性返回一个ObservableCollection,它与WPF数据绑定进行了非常好的交互。看到这个了吗