EF已经出了一段时间了,我正在考虑对它进行评估 - 你的经历是什么?
我对Web和桌面应用程序都很感兴趣,也许您在EF和其他ORM工具之间进行了一些比较.
学习曲线是一个因素,因为有一个团队参与.这个东西是一个臃肿的混乱,还是它的精益和尖锐?
我听说微软正在内部和大规模地使用它,所以这是一个好兆头.如果你对它如何适应基于云的未来有任何想法,那么MS似乎在这些日子里花钱,这也可能很有趣.毕竟,如果这是我们最终可能需要知道的事情,那么优先级会提高一两级.
非常感谢!
好吧,我刚刚在EF中完成了一个完整的系统,这是我在生产环境中第一次使用EF的真实体验.该应用程序现在运行大约45天,每天有100个用户点击它,没有任何问题.
我认为最重要的是你必须改变你的想法.如果您正在考虑关系数据库ORM,那么您已经有了错误的心态.你需要考虑部分方法,对象和扩展.一旦你掌握了基本的思维方式,事情开始流动(你从第一次开始时就重写了很多代码).
获得帮助很粗糙
EF的另一个令人沮丧的部分是,你到处寻求帮助的地方到处都是L2S傻瓜,他们认为他们已经知道你需要做的一切,并且一直试图告诉你放弃它并且只是使用L2S ...如果我愿意的话如何在L2S中这样做,那么也许他们的意见是有效的......
EF工作正常
生成对象然后可以通过部分方法扩展的基本功能很有效.我实际上在早期阶段非常沮丧,因为我一直试图按照我在SQLCommand中的方式来做事.一旦你意识到你可以考虑业务逻辑需要什么而不是SQL如何工作,你可以做更多的事情.
例如 - 我一直在尝试进行连接,以获取特定FK与各种任务相关的事项列表.一旦我终于弄清楚我可以将整个claus交给EF,并想出如何快速地将数据发回给我,代码实际上要快得多.
包括臭味
但Include语法对我来说就像是一个黑客.必须使用.Include("TableName.DetailTable")是UGLY.也许我只是被intellisense宠坏了,但我讨厌那种语法.
按需加载
主细节负载也有点难看.如果您不想包含它们,您可以随时获取它们的参考,看看是否.IsLoaded然后调用.Load.为什么?对象不能为我这样做吗?我最终在我的对象上实现了一个扩展方法,如果我尝试加载未加载的详细信息类,它会按需加载它.似乎应该已经内置到我这里.
注意:上面提到的过滤记录集的详细信息加载并不复杂,但也不明显.您可以使用Lambda表达式进行过滤.
您是否想要移动项目?
这是一个重要原因:非供应商锁定.如果您想将该代码带到另一个数据库,则无法使用Linq2SQL.没有提供者模型.您可能有机会将EF系统移至其他供应商.在我的情况下,相同的项目在SQL Server和VistaDB EF(Alpha)上运行,无需更改代码.所以我可以在运行时选择xcopy来部署它,或者连接到服务器.