em7*_*m70 26 .net c# orm persistence poco
我正在开始一个新项目,我正在寻找一个非常好的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} );
Run Code Online (Sandbox Code Playgroud)
这很简单,我喜欢它.您将获得延迟加载,并使用Prefetch API默认和/或按查询设置eager/deep加载.您可以动态(并轻松地)构建和构建任何无限级别的过滤器/排序/加载.这是很不错的.
关于LLBLGen只有两个问题:第一,它的价格并非所有公司都愿意支付,特别是考虑到微软替代品的炒作.其次,命名约定虽然是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提供程序(还没有尝试过).NHibernate中的"Session"在进行类似于与L2S中的DataContext或EF中的ObjectContext相关的Web开发时会出现问题(LLBLGen不会因为自我跟踪实体而受到影响).
我对NHibernate的最大问题是查找信息的能力.应该以某种方式放在一起并且没有太多指导的太多部分可以包括用于映射和查询的高级信息.如果不是我有一个朋友(Tuna Toksoz,@ tehlike在twitter上),他恰好是NHibernate项目源代码的提交者,我真的遇到了麻烦.
我学到的道德是:如果你想要的东西只是工作而且有点基本使用Linq To Sql或SubSonic,如果你想要中间的东西,你的生产环境可以买得起BETA .NET版本(给定golive存在)使用Entity Framework 4.0如果你想要一个非常强大的东西并且能够承受艰苦的学习过程去NHibernate,而且,最重要的是,如果你能负担得起LLBLGen,那就使用它.
看一下DataObjects.Net:
好处:
缺点: