C# 实体框架还是其他什么?

C# 实体框架还是其他什么?,c#,.net,database,orm,C#,.net,Database,Orm,我刚从C语言转换到C语言,我想花点时间学习数据库工作。我被各种选项弄得不知所措:Linq到sql,ADO.NET。nHibernate、EntityFramework、普通的老sql(我已经习惯了)。由于我只有有限的“学习”时间(每天大约2.5小时),我应该把时间花在哪里 我不想学下个月就会过时的东西,或者没有人会雇佣我的东西 如果我学习EF,这些知识会很容易转移到nHibernate吗 更新:我决定从nHibernate开始。虽然EF4.0已经修复了许多缺点,但我现在没有VS2010,而且我赢

我刚从C语言转换到C语言,我想花点时间学习数据库工作。我被各种选项弄得不知所措:Linq到sql,ADO.NET。nHibernate、EntityFramework、普通的老sql(我已经习惯了)。由于我只有有限的“学习”时间(每天大约2.5小时),我应该把时间花在哪里

我不想学下个月就会过时的东西,或者没有人会雇佣我的东西

如果我学习EF,这些知识会很容易转移到nHibernate吗


更新:我决定从nHibernate开始。虽然EF4.0已经修复了许多缺点,但我现在没有VS2010,而且我赢了;再过一年我就不会有了。因此,nHibernate是目前最合适的人选。

微软正在展示的EntityFramework就是他们提出的数据库技术。它包含了LINQtoSQL的许多功能。我将从ADO.NET开始。您也会经常遇到ADO.NET

就像评论中说的那样,太LinqtoSQL也不再先进了


与其选择你认为你可能被雇佣的东西,不如将EF(也许)作为解决ORM问题的一个具体例子。尽管如此,你未来的雇主可能会是一个nHibernate的房子,或者有他们自己的解决方案。学习EF,但利用这一经验来学习ORM的细节。

如果您希望探索实体框架,Julie Lerman的文章将演示您需要开始的许多基础知识。正如Kevin所提到的,微软不太重视LINQ到SQL,而更重视LINQ到EF。

NHibernate在继承映射方面有更大的灵活性,更好地与存储过程/数据库函数/自定义SQL/触发器集成,支持公式属性,而且它只是一个比EF 4更成熟的平台。

,我认为NHibernate(加上FluentNHibernate和Linq to NHibernate)让我保持了最清醒的头脑。在现实项目中,在实体框架中为大型数据模型管理单个EDMX文件在大型团队中是非常痛苦的;在NHibernate中,Fluent允许您跨多个C#文件分离内容,或者HBM xml格式允许您使用多个xml文件。上次我使用实体框架时,这并不容易,除非每个模型都有单独的数据上下文。(如果这一点最近有所改变,我为我的无知道歉)。在大多数ORM工具中,NHibernate最困难的事情可能会以这样或那样的方式困扰您:将对象图映射到关系模型是一件棘手的事情。但是你可以控制很多事情,比如延迟加载、父母/孩子关系等等;如果你使用Fluent,按惯例绘制地图也是一个巨大的胜利

但你不会因为选择微软正在投资的工具而破产;很多公司甚至没有认真考虑使用ORM直到实体框架被释放。就个人而言,我真的不想为那些在供应商找到一个可行的解决方案之前才做出这样决定的公司工作,但事实是,许多公司确实(或将)使用实体框架

使用实体框架绝对没有错,尽管我怀疑如果你在现实世界的项目中愤怒地使用EF 4周,在项目中有多个开发人员的情况下愤怒地使用NHibernate 4周,你很可能会发现NHibernate更简单。根据我的经验,EF一开始看起来简单得多,但使用的时间越长,它就越毛茸茸的。NHibernate一开始看起来和感觉都很难,但使用它的时间越长,它就越简单和明显。

(很抱歉前面的文章太长,但我决定尝试给两个主要框架提供一些背景知识)

我想补充一点,使用非Microsoft技术的好处是可以创建一个更大的问题鸟瞰图,并防止您将自己锁定在.NET+实体+SQL Server循环中(即使实体与数据库无关)

<>你可以考虑NHiBiNATE。它可以说是最成熟的开源ORM框架之一。它速度快,被大型和非常大型的企业使用。还有一个最大的弱点:NHibernate被认为具有相当陡峭的学习曲线。如果你走这条路,我可以推荐曼宁出版的优秀书籍《NHibernate In Action》

NHibernate的许多弱点已经从两个方面消除了:企业已经在()中实现,这也涵盖了完全自动化的映射。S#arp架构使复杂的NHibernate场景变得轻而易举(但仍然有一个陡峭的学习曲线)

另一方面是简单的配置部分,它创建了一个“单点维护”的情况:只需在C#中对实体对象进行编码,调用
Config
,如果数据库不存在,则创建数据库。为你节省了很多时间。Fluent真的让与NHibernate的合作变得像它一直应该做的那样(事实上,EF也可以这样做)

请注意,除非最近发生了更改,否则该实体框架需要更改存储过程的数据库,这就是我个人很少应用它的原因。此外,除非你自己付出很大努力,否则EF在企业中的规模不会太大。当您拥有现有数据库、大型企业需要它或不想更改已创建的数据库(包括触发器、SP、约束)时,NHibernate将大放异彩


从学习的角度来看:正如其他人所说,学习EF是一个良好的开端,它相当容易,并且有大量的文档。较小的组织更可能使用EF,因为它易于使用。中型到大型公司更有可能选择NHibernate(以及类似的企业级映射系统)。EF是相当新的,NHibernate有着悠久的历史。两者都有各自的优点。两者都能很好地与LINQ合作。两者都很好理解,都能在你的简历中找到一席之地。

我和你处境相同,我发现