nHibernate开发者的EF4?

nHibernate开发者的EF4?,nhibernate,entity-framework,fluent-nhibernate,entity-framework-4,Nhibernate,Entity Framework,Fluent Nhibernate,Entity Framework 4,自从经历了v1的失望之后,我第一次需要进入EF4。从那时起,我一直是一个快乐的nHibernate用户,但由于客户的偏好,我现在需要为一个新项目重新选择EF 有人为这两个ORM概念之间的类比创建了快速指南吗?如果我能把nHibernate的概念翻译成EF4的概念,这将给我一个良好的开端 例如,是否有HQL的类似物(值得使用),那么条件查询、类映射、sql自定义方言、在事务中登记项、执行存储过程等呢 如果您有任何见解,我们将不胜感激。您可能对来自NH的代码优先方法感兴趣。Ayende快速浏览了一下

自从经历了v1的失望之后,我第一次需要进入EF4。从那时起,我一直是一个快乐的nHibernate用户,但由于客户的偏好,我现在需要为一个新项目重新选择EF

有人为这两个ORM概念之间的类比创建了快速指南吗?如果我能把nHibernate的概念翻译成EF4的概念,这将给我一个良好的开端

例如,是否有HQL的类似物(值得使用),那么条件查询、类映射、sql自定义方言、在事务中登记项、执行存储过程等呢


如果您有任何见解,我们将不胜感激。

您可能对来自NH的代码优先方法感兴趣。Ayende快速浏览了一下,这可能会给你带来一些价值


您可能对NH的代码优先方法感兴趣。Ayende快速浏览了一下,这可能会给你带来一些价值


由于没有人跳上这本书,我走出去,开始阅读网络上的其他资料,拼凑出EF4似乎是什么。如果将来有人需要做这种调查,我会把我的资料贴在这里

这里有一个关于NH和EF的详细讨论,但讨论了一些有趣的话题

微软在这里提供了一些帮助,尽管完全忽略了似乎更像NH的POCO映射和fluent映射

有一个新的添加到EF pending中,它似乎模仿了fluent NH映射。下面是该功能的详细信息,这里是最新功能的链接

相当于HQL

被称为“函数映射”,与Linq到SQL的方式非常相似,只是现在据报道,由于可以显式地不返回任何内容、标量、复杂类型或实体,所以陷入未知结果类型的可能性要小得多。这是EF4的一个例子

似乎有多种方法可以映射模型。使用EDMX设计器是一种完全自动化的方法,对于绝对控制映射的小型项目来说似乎非常好

查询有几种方法,最适合开发人员的方法似乎是,当然也像LINQ to NH

给你

总体而言,EF的当前状态更像是LINQ to SQL,而不是NHibernate,但考虑到L2S的易用性以及微软对EF的持续投资,这似乎是一个好的起点

最后,由于我是一名开发人员,我忍不住带它去试驾。这是我探索的冰山一角。SQL事件探查器确认,即时/延迟加载可以按照公布的方式工作,并且更新仅更新已更改的字段

 // LINQ QUERY
 using (MsgEntities ctx = new MsgEntities()) {
    return (from m in ctx.Messages
            where m.SentAt.Month == 11
            select m).ToList();
 }

// GET ONE WITH OBJECT GRAPH
Message msg = null;
MsgEntities ctx = new MsgEntities();
msg = ctx.Messages // .Include("MessageAttachments.Attachment") -uncomment for eager loading
.Where(m => m.PK_Message == PK_Message).SingleOrDefault();

// ADD
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Messages.AddObject(new Message() {
      Dsc = "added message @ " + DateTime.Now.ToString("dd-MMM-yy HH:mm:ss"),
      OriginalRecipientDsc = "Tahbaza",
      Sender = "Tahbaza",
      SentAt = new DateTime(2008, 11, 15),
      Subject = "Nothing special"
    });
}

// UPDATE
Message m = GetOneMessage(3);
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Attach(m);
   m.Subject = "message UPDATED @ " + DateTime.Now.ToString("dd-MMM-yy HH:mm:ss");
   ctx.SaveChanges();
}

// DELETE
Message m = GetOneMessage(3);
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Attach(m);
   ctx.DeleteObject(m);
   ctx.SaveChanges();
}

我希望这对我两天前所在的人有所帮助。

因为没有人跳上这本书,所以我走出去,开始从网上的其他来源阅读EF4的内容。如果将来有人需要做这种调查,我会把我的资料贴在这里

这里有一个关于NH和EF的详细讨论,但讨论了一些有趣的话题

微软在这里提供了一些帮助,尽管完全忽略了似乎更像NH的POCO映射和fluent映射

有一个新的添加到EF pending中,它似乎模仿了fluent NH映射。下面是该功能的详细信息,这里是最新功能的链接

相当于HQL

被称为“函数映射”,与Linq到SQL的方式非常相似,只是现在据报道,由于可以显式地不返回任何内容、标量、复杂类型或实体,所以陷入未知结果类型的可能性要小得多。这是EF4的一个例子

似乎有多种方法可以映射模型。使用EDMX设计器是一种完全自动化的方法,对于绝对控制映射的小型项目来说似乎非常好

查询有几种方法,最适合开发人员的方法似乎是,当然也像LINQ to NH

给你

总体而言,EF的当前状态更像是LINQ to SQL,而不是NHibernate,但考虑到L2S的易用性以及微软对EF的持续投资,这似乎是一个好的起点

最后,由于我是一名开发人员,我忍不住带它去试驾。这是我探索的冰山一角。SQL事件探查器确认,即时/延迟加载可以按照公布的方式工作,并且更新仅更新已更改的字段

 // LINQ QUERY
 using (MsgEntities ctx = new MsgEntities()) {
    return (from m in ctx.Messages
            where m.SentAt.Month == 11
            select m).ToList();
 }

// GET ONE WITH OBJECT GRAPH
Message msg = null;
MsgEntities ctx = new MsgEntities();
msg = ctx.Messages // .Include("MessageAttachments.Attachment") -uncomment for eager loading
.Where(m => m.PK_Message == PK_Message).SingleOrDefault();

// ADD
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Messages.AddObject(new Message() {
      Dsc = "added message @ " + DateTime.Now.ToString("dd-MMM-yy HH:mm:ss"),
      OriginalRecipientDsc = "Tahbaza",
      Sender = "Tahbaza",
      SentAt = new DateTime(2008, 11, 15),
      Subject = "Nothing special"
    });
}

// UPDATE
Message m = GetOneMessage(3);
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Attach(m);
   m.Subject = "message UPDATED @ " + DateTime.Now.ToString("dd-MMM-yy HH:mm:ss");
   ctx.SaveChanges();
}

// DELETE
Message m = GetOneMessage(3);
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Attach(m);
   ctx.DeleteObject(m);
   ctx.SaveChanges();
}

我希望这对我两天前所在的人有所帮助。

也许你对EF 1感到失望,因为你试图像NH一样使用它?这是很自然的;EF不是NH的一个很好的实现(它也不尝试这样做)。要理解EF本身的含义,想想LINQ。他可能很失望,因为EF是一个可怕的ORM实现。在我第一次使用EF1时,我对NH一无所知;我对EF1本身的优点(或不足)感到失望。我在这里问了一个无关紧要的具体问题:也许你对EF1感到失望是因为你试图像NH一样使用它?这是很自然的;EF不是NH的一个很好的实现(它也不尝试这样做)。要理解EF本身的含义,想想LINQ。他可能很失望,因为EF是一个可怕的ORM实现。在我第一次使用EF1时,我对NH一无所知;我对EF1本身的优点(或缺乏优点)感到失望。我在这里提出了一个无关紧要的具体问题: