何时不使用entity framework
我一直在玩EF,看看它能处理什么。 还有很多文章和文章解释了EF可以使用的各种场景,但是如果错过了“con”方面的话。 现在我的问题是, 在什么样的情况下,我应该远离entity framework ?
如果你在这个领域有一些经验,告诉我哪些情景不适合EF。 告诉我你遇到的一些不利因素,你希望你select了不同的技术。
我也只是在“玩”的阶段,虽然我担心缺乏内在的持久不可知论,但我确信会有一个“解决方法”。
事实上,甚至在n层架构中都没有解决办法。
WCF + EF
如果我已经正确地阅读了这篇文章 ,那么我没有看到任何问题在使用WCF的情况下序列化实体(实体WCF),持久性无知也不是问题。
这是因为我主要使用PI来进行unit testing。
unit testing是可能的! (我认为)
在这个系统中,我们可以简单地使用一个模拟服务(例如通过在另一个基于接口的类中包含对服务的调用)。 这将testing我们的演示代码(没有必要对EF / DAL进行unit testing – 这是微软的工作!)当然,集成testing仍然需要充分的信心。
如果你想写一个单独的数据库,这将在DAL层完成,通过configuration文件很容易实现。
我的塔彭丝价值
我的看法 – 对EF做出你自己的想法,不要被那些正在轮stream的厄运和沮丧拖延。 我想这将是一段时间左右,MS将在明年左右剔除这些错误。 根据丹·西蒙斯的说法,PI肯定会进来。
编辑 :我刚刚意识到我跳了枪,像一个好政治家没有真正回答所问的问题。 哎呀。 但是我会留下来,以防其他人发现它有用。
没有信心的投票列举了那些相信他们知道哪些function及其实现适合于ORM / Datamapper框架的人眼中的几个失误和/或缺less的function。
如果这些问题都不是你的问题,那么我不明白为什么你不应该使用它。 我还没有听到,这是一个错误的混乱,左右摇摆。 所有的注意事项都是哲学的。 我碰巧同意不信任的表决,但这并不意味着你应该。 如果你碰巧喜欢EF的工作方式,那就去做吧。 同时,我build议你至less读不信任的投票,并试图对每个问题有一个基本的了解,以便做出明智的决定。
除了这个问题之外,还有问题的核心 – 您需要密切关注正在生成的Sql,以便在性能问题投入生产之前进行调整。 即使你在后端使用了特效,我还是会寻找你可能会碰到数据库太多次的场景,然后相应的重写你的映射或者提取场景。
一个潜在的大问题:entity framework1.0不支持持久性的无知。 这意味着您的业务层对数据访问层有依赖性。
如果你的整个应用程序将被托pipe在相同的过程(如IIS上的网站),那么这是没有问题的。
但是,如果您需要远程实体(例如,Silverlight或Windows Mobile客户端),则您的实体不会轻易通过连线进行序列化。 您将不得不创build单独的数据传输类,以便通过networking发送实体,并使用额外的逻辑来在实体类和DTO之间编组数据。
编辑:拼写。
并非所有数据模型都很好地映射到应用程序实体。 如果映射不是相对直接的,我会跳过entity framework。 你会发现自己倒立,使其工作没有任何明确的好处。
Anders Hejlsberg在这里有一些关于对象/关系映射的有趣评论。
由于EF不支持POCO,因此可能难以编写好的unit testing。 这是不信任投票中的一个敲门声。
如果你想写出好的testing,EF会提出障碍。 你可以解决它们 ,但这是不平凡的。
尽pipeSQL CE 3.5 SP1和Entity Framework 4.0 Beta 1都支持标识列,但是这两个产品一起使用(至less达到所列版本),不支持标识列。 您将被要求自行设置主键。
除此之外,我一直在享受与SQL CE的EF。