- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在开始一个新项目,我正在寻找一个非常好的 ORM 或一个非基于 SQL 的持久层。
对于这个项目,我真的不关心数据是如何持久化的,只要它可以以合理的速度查询和存储,最重要的是使用简单的查询。
并发应该无缝处理(前端将在另一层,并且会有多个同时用户,尽管不一定要处理相同的数据)并且我不必关注数据层(简单查询,自动惰性加载等)越好。
我还想不惜一切代价避免弄乱基于字符串的查询,以便支持 LINQ 或其他直观且可能是强类型查询的工具获得巨大的好处。
最后使用 POCO 对象是我真正想做的另一件事
以下是我评估过的产品列表以及它们不适合的原因,只是为了让我看不到有关使用这些产品的任何建议:
我还查看了 MongoDB 和 CouchDB,但在这些情况下,相关对象的捕获看起来需要太多测试才能正确处理。此外,它们都不提供强类型查询。
提前感谢您的建议!
最佳答案
如果您能负担得起 LLBLGen 许可证,那就买吧。
越是使用 LINQ 查询语法,我就越不喜欢它(尽管我喜欢与其相关的语言功能,如扩展方法和表达式树)。
一开始我和其他人一样喜欢,但不确定 XYZ LINQ 提供程序中的 [[ where employee.Name.StartsWith("John Smit") ]] 是在 SQL 语句中还是在 LINQ to Objects 中完成(在SQL 返回所有结果),而 [[ user.Roles.Contains(role) ]] 是否能正常工作则落后了一大步。
LLBLGen 可以在不加载的情况下删除所有项目,就像
MyEntityCollection.DeleteAll( new MyEntity {Condition = value} );
这很简单,我喜欢它。你得到延迟加载,你默认设置急切/深度加载和/或使用 Prefetch API 的每个查询。您可以动态地(轻松地)组合和构建无限级别的任何过滤器/排序/加载。非常好。
关于 LLBLGen 只有两个问题:首先,并非所有公司都愿意支付它的价格,尤其是考虑到 Microsoft 替代品的大肆宣传。其次,命名约定虽然是 RDBMS 理论中的标准),例如 PredicateFactory 而不是“where”或“filter”,Prefetch 而不是深度加载,甚至是 SortExpression 而不是 orderby,这些对于第一次使用它的开发人员来说都有点可怕时间,但很快你就会学会爱他们,因为他们给了你力量和轻松。在 LLBLGen 3.0 中有关于 POCO 支持的讨论。我不能说,因为我不知道。
现在鉴于我不再在使用 LLBLGen 的公司工作,该公司使用 LINQ to SQL 主要是因为它在许多项目中被“证明”而没有大的失败(不像 EF 1,它在 LINQ to SQL 中甚至缺乏 LINQ 功能并且性能非常差,并且在高级映射中可能会受到很大限制 - 它应该是最好的!)。我在这家公司都用过,都讨厌。新项目的决定仍然是 LINQ to SQL,并尽我们所能克服它的局限性。这个网站 StackOVerflow 本身运行在它之上!!!你可以解决它来做 SEMI-POCO(当涉及到关联时你仍然需要使用一些 L2S 相关的类型)。
我也在家里做一些小项目。由于我不再拥有 LLBLGen 许可证,我决定学习 NHibernate 并将其与 Fluent NHibernate 和 LINQ To NHibernate 一起使用。通过这个我了解到 NHibernate 非常强大。它通过一些功能改变了我的工作方式,例如自动更新数据库模式(我在使用它时几乎从未接触过 D)。 LINQ 提供程序(在 NHibernate Contrib 项目中)有时非常缺乏,但 NHibernate 本身未发布的源代码包含更好的 LINQ 提供程序(尚未尝试)。当您进行与 L2S 中的 DataContext 或 EF 中的 ObjectContext 相关的 Web 开发时,NHibernate 中的“ session ”会出现问题(由于 self 跟踪实体,LLBLGen 不会受到这些问题的影响)。
不过,我在使用 NHibernate 时遇到的最大问题是查找信息的能力。太多的部分应该以某种方式放在一起,而没有太多的指导可以包含映射和查询的高级信息。如果不是我有一个 friend (Twitter 上的 Tuna Toksoz,@tehlike)碰巧是 NHibernate 项目源代码的提交者,我真的会遇到大麻烦。
我学到的教训是:如果你想要一些可以正常工作的东西并且有点基础,请使用 Linq To Sql 或 SubSonic,如果你想要一些中间的东西并且你的生产环境可以负担得起 BETA .NET 版本(假设存在 golive),请使用Entity Framework 4.0,如果你想要一些非常强大的东西并且可以负担得起艰苦的学习过程,请转到 NHibernate,而且最好的是,如果你可以负担得起 LLBLGen,请使用它。
关于c# - ORM/持久层建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1654140/
我是Hibernate的新手。当我保存特定实体时,它将从现有实体中重写数据。 我将ID用作自动生成,如下所示: @Id @GeneratedValue(strategy=GenerationType.
我正在尝试以连续模式使用CouchDB更改通知API,所以我想发送此消息 _changes?feed = continuous?include_docs = true作为GET请求到达我的CouchD
我有 XMPP 服务器(openfire)和一堆客户端(spark),分为几个组(部门)。我正在寻找能够将它们留在 session 室中的能力。我的意思是 Skype 具有的类似功能;当用户关闭带有群
我发布这个问题是为了看看我是否正确理解 Azure Functions 中的并行性,特别是 Durable Functions。 最近使用 az cli 在 Azure Functions 中添加了设
我在 Dev Env 上有一个 AKS 集群,上面运行着一些容器。我还启用了 Azure Log Analytics。但我可以看到正在运行的当前容器的日志,而不是已被终止或停止的旧容器的日志。 我想知
在 Akka 中,当一个 actor 在处理消息时死亡(在 onReceive(...) { ... } 内),该消息就会丢失。有没有办法保证无损?有一种配置 Akka 在将消息发送到 onRecei
我试图让 selectOneMany 取得有限的成功。 我有以下数据库模型 User email Text verkey Text Maybe verified Bool password T
我需要使用持久性(Yesod)从键列表中获取实体列表 假设我有一个 Model 及其相应的 ModelId。我身边有: keys :: [ModelId] 我需要得到 models :: [Model
我有一个使用 GWT、请求工厂和地点/Activity 构建的网络应用程序。我很好奇我使用的历史 token 是否持久。该任务基本上就是让 URL 定义我的网络应用程序的确切位置(读作“文件/文件夹结
我正在寻找一种 jQuery 方法来在刷新页面时使页面元素持久保留在用户屏幕上。当我刷新页面并且丢失 jQuery 页面中的内容时,它会发生变化。 我需要页面持久。如何刷新页面并保持元素不刷新(持久)
当我尝试使用 gcc 编译带有 -fopenmp 标志的 C 代码时,我已经持续收到此错误超过 6 小时了。 错误:控制谓词无效 for ( int i = 0; i #include #ifde
我有带有验证注释的实体,例如@NotNull。我不知道如何防止容器管理的事务在批量持久操作中出现 ConstraintViolationException 的情况下回滚,例如: public void
这是我的代码: http://jsfiddle.net/KCb5z/8/embedded/result/ http://jsfiddle.net/KCb5z/8/ $(function () {
我正在与服务器通信,理想情况下,我希望输入流和输出流始终处于运行状态。我收到未经请求的响应,因此我必须始终准备好接收输入流上的数据。 在我进一步深入之前,我应该说我建立的任何连接都必须能够支持 SSL
我正在寻找一种正确扩展 Azure Functions 的方法,但遇到了问题。 我有一组 IoT 设备,通过 HTTP 向 Azure 发送数据(为此,有一组自动扩展的 Azure Functions
1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态。 比如:刚刚使用new关键字创建出的对象。 2.持久态 存在于session中,事务还未提交,提交之后
我在 Kohana v2 中使用数据库 session 驱动程序。为了使 session 持久化,Kohana 创建了一个 token cookie。这个 cookie 使用了我想的 cookie 配
有谁知道是否有办法使用 PyWinrm 打开一个持久的 PowerShell session ,该 session 保持状态并且可以多次调用?我正在尝试执行以下操作: #!/bin/python im
在运行的Elasticsearch集群中,配置文件中的index.number_of_replicas设置为1。 我可以通过运行以下命令在运行的集群上将其更新为2 # curl -XPUT "http
我在“这么长的帖子必须意味着大量的代码和配置”部分下一对一地使用指南代码。 http://blog.springsource.com/2006/08/07/using-jpa-in-spring-wi
我是一名优秀的程序员,十分优秀!