我一直在玩EF,看看它能处理什么.此外,许多文章和帖子解释了可以使用EF的各种场景,但是如果以某种方式错过"con"方面.现在我的问题是,在什么样的情况下我应该远离实体框架?
如果你在这个领域有一些经验,请告诉我哪些场景不适合EF.告诉我你经历过的一些缺点,你会选择不同的技术.
在不信任投票列出了几个失误和/或在那些谁相信他们的眼睛的功能失位知道有什么特点,以及它们的实现,是正确的ORM/DataMapper的框架.
如果这些问题都不是什么大问题,那么我不明白为什么你不应该使用它.我还没有听说这是一个左右爆炸的车子.所有反对它的警告都是哲学的.我碰巧同意不信任投票,但这并不意味着你应该这样做.如果您碰巧喜欢EF的工作方式,那就去吧.与此同时,我建议你至少阅读不信任投票,并尝试对每个问题进行初步了解,以便做出明智的决定.
除了这个问题和问题的核心 - 您需要密切关注正在生成的Sql,以便在性能问题投入生产之前进行调整.即使你在后端使用过程,我仍然会寻找你可能会多次访问数据库的情况,然后重新编写映射或相应地获取方案.
一个潜在的大问题:Entity Framework 1.0不支持持久性无知.这意味着您的业务层依赖于您的数据访问层.
如果整个应用程序将托管在同一个进程中(如IIS上的网站),那么这不是问题.
但是,如果您需要远程实体(例如Silverlight或Windows Mobile客户端),那么您的实体将无法轻松地通过网络进行序列化.您必须创建单独的数据传输类以通过线路发送实体,以及在实体类和DTO之间编组数据的其他逻辑.
编辑:拼写.
我也只是在'玩弄'阶段,虽然我担心缺乏内置的持久性不可知论,但我确信会有"解决方法".
事实上,甚至在n层架构中都没有解决方案.
WCF + EF
如果我正确地阅读了这篇文章,那么我没有看到任何问题通过网络序列化实体(使用WCF),并且持久性无知也不是问题.
这是因为我主要使用PI进行单元测试.
单元测试是可能的!(我认为)
在这个系统中,我们可以简单地使用模拟服务(通过在基于另一个接口的类中包含对服务的调用,例如可以从工厂生成).这将测试我们的演示者代码(不需要对EF/DAL进行单元测试 - 这是微软的工作!)当然,仍然需要进行集成测试才能充分发挥自信.
如果你想写一个单独的数据库,这将在DAL层完成,可以通过配置文件轻松实现.
我的Tuppence值得
我的观点 - 对EF进行自己的思考,并且不要因为那些正在进行巡回赛的所有厄运和沮丧而被推迟.我猜它会在一段时间内出现,MS会在明年左右解决这些问题.根据Dan Simmons的说法,PI肯定会出现.
编辑:我刚刚意识到我跳了枪,就像一位优秀的政治家实际上没有回答被问到的问题.哎呀.但我会留下这个以防万一其他人发现它有用.