新足迹

 找回密码
 注册

精华好帖回顾

· 一个老头 (原创分享) (2015-6-11) ahyu · 春天里怒放的jacaranda ~~奥黛丽的小屋 (2012-11-20) 明河素月
· 谁在自己车上装了倒车雷达? (2005-12-6) cn214 · 把旧桌子改成复古风的vanity (2021-1-15) jz1215
Advertisement
Advertisement
查看: 2352|回复: 25

最近在研究ENTITY FRAMEWORK 有一件事不明白 [复制链接]

发表于 2012-12-5 15:38 |显示全部楼层
此文章由 yangwulong1978 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yangwulong1978 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 yangwulong1978 于 2012-12-5 15:53 编辑

我一直都是做那种传统的ADO。NET + SQL STORE  PROCEDURE  来做存数据用的,

现在在看ENTITYFRAMEWORK + LINQ。

如果用了,ENTITYFRAMEWORK + LINQ 是不是就不需要存储过程了? 

直接在程序里用LINQ查询?

如果,ENTITYFRAMEWORK  LINQ 和 STORE PROCEDURE 混合一起用的话,什么情况下用什么?

Advertisement
Advertisement

发表于 2012-12-6 10:25 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
一般情况下不需要存储过程了, 但有些需要在数据库端实现的逻辑还是放在存储过程里好。 或者由于性能考虑不得不放在数据库端实现的时候。

评分

参与人数 1积分 +3 收起 理由
yangwulong1978 + 3 我很赞同

查看全部评分

发表于 2012-12-6 11:20 |显示全部楼层
此文章由 yangwulong1978 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yangwulong1978 所有!转贴必须注明作者、出处和本声明,并保持内容完整
flyspirit 发表于 2012-12-6 10:25
一般情况下不需要存储过程了, 但有些需要在数据库端实现的逻辑还是放在存储过程里好。 或者由于性能考虑不 ...

我个人是认为STORE PROCEDURE 性能会快不少,,ENTITYFRAMEWORK 就是在CODE 和 数据库之间夹了层东西,,方便程序员,但是性能,我是没用过,不好说,不过,看现在ENTITY FRAMEWORK微软在推,很多公司也在用,还是学习学习,,

发表于 2012-12-6 11:27 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我认为软件系统不是光看performance的。 有很多其他因素考虑, 比如维护性, 扩展性等等都是要考虑的因素。好的设计是在这些需求之间找到平衡点。

Entity Framework等ORM的基本理念是商业逻辑应该在逻辑层这边搞定, 维护性,扩展性都有很大优势。

发表于 2012-12-6 11:31 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
sp还是要用的,尤其是一些复杂的sp,不可能用linq代替

entity framework直接把sp包装成function了,这样你的context里面就有所有的sp对应的function,直接调用就行

发表于 2012-12-6 12:49 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我在一个网站上用EF记录用户的Action,就是简单的Add(object).开销大的吓人,估计是用于维护记录的状态了。后来用EF调用Sp,就好了很多很多。给管理员用的management页面用EF就没啥问题了。
Advertisement
Advertisement

发表于 2012-12-6 13:04 |显示全部楼层
此文章由 yangwulong1978 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yangwulong1978 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我现在财务软件,每个用户每天可能都产生几百个,TRANSACTION ,日积月累 都好多万条,,我觉得还是SP 快点,用ENTITYFRAMEWORK 调用SP  应该比自己去查询会好很多,

发表于 2012-12-6 16:27 |显示全部楼层
此文章由 longmurphy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 longmurphy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
开始用EF的时候,总是有点不太顺手,可能思路还没有从以前转过来,不过也很想知道大家在大量transaction的系统里面是如何用EF的。

发表于 2012-12-6 19:00 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
真没有必要守着一点performance gain而放弃ORM, 很多情况下performance的影响很小(前提是用对了)。

StackOverflow 这么大的量, 都能够用linq2sql实现, 绝大多数的系统都没问题。

评分

参与人数 1积分 +3 收起 理由
kanjunhai + 3 我很赞同

查看全部评分

发表于 2012-12-6 20:13 |显示全部楼层
此文章由 kanjunhai 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kanjunhai 所有!转贴必须注明作者、出处和本声明,并保持内容完整
I am not big fan of EF, if your database is SQLSever, linq2sql is still better choice in my view.
头像被屏蔽

禁止访问

发表于 2012-12-6 22:01 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
大而全的东西,建议少用。

评分

参与人数 1积分 +3 收起 理由
kanjunhai + 3 我很赞同

查看全部评分

Advertisement
Advertisement

发表于 2012-12-6 22:19 |显示全部楼层
此文章由 brahmasky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 brahmasky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lz也是搞开发的,呵呵,以前没注意到

发表于 2012-12-6 22:26 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
对这类orm tools,测试环境下要用sql profiler盯着你的database,而且新手很容易误用,DBA那边比较难以通过.

发表于 2012-12-7 10:50 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
kanjunhai 发表于 2012-12-6 20:13
I am not big fan of EF, if your database is SQLSever, linq2sql is still better choice in my view.

LINQ2SQL is almost dead.

发表于 2012-12-7 14:29 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
EF的确很方便,但是效率低的惊人。EF的逻辑是Persistence Ignorance, 就是你操作你的POCO就好了,不用管SELECT, INSERT, UPDATE,所以business logic和persistence logic很完美的分开了。

ADO.NET + SP跟EF是两个极端,ADO.NET +SP你知道什么时候存,什么时候取,因为这些都得你自己实现。如果实现的不好的话会很messy, 如果实现的好的话也可以把business logic和persistence logic分开。SP还有个好处就是安全性。如果你完全用SP实现的话,数据库就可以只赋给EXECUTE权限,更安全。

对于中小型项目来说,个人觉得还是Micro ORMs最适合,比如PetaPoco啊什么的。基本上就是ADO.NET + Mapping, 对大多数情况足够了。

我自己写了一个Micro ORM, 本来是用在公司项目里的,但是觉得挺好用就放GITHUB了。文档还没来的及写,感兴趣的童鞋自己看看吧,有问题的话QQ 331633199

没权限发链接,大家自己手工转格式吧
https%3A%2F%2Fgithub.com%2Fz-george-ma%2FSimpleADO

发表于 2012-12-7 15:01 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
flyspirit 发表于 2012-12-6 19:00
真没有必要守着一点performance gain而放弃ORM, 很多情况下performance的影响很小(前提是用对了)。

S ...

没这么简单吧
回忆是红色的天空
Advertisement
Advertisement

发表于 2012-12-7 16:10 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果ADO.net + SP
请问Transaction 应该在哪边做?

可不可以C# 和 数据库里都使用transaction?

发表于 2012-12-7 16:58 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个问题要看是什么上下文了。

比如说用户下订单,需要进行两个操作,保存订单和更新存货量。如果是个很简单的系统,你把这两个操作写到一个SP里面去没啥问题。但如果这两个操作都很复杂,似乎就应该用unit of work了。

发表于 2012-12-7 22:03 |显示全部楼层
此文章由 thinkriver 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 thinkriver 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 thinkriver 于 2012-12-7 22:06 编辑

从EF1开始就在边学边用了,现在已经到Entity Framework 5,不过EF其实没有2,3,版本直接跳到4, EF5 已经对性能做和很多优化,在开发中的EF 6有更多优化。

对于使用EF的时候,是需要开发人员多了解EF的执行原理,做好query warm up和cache, 在多数情况下,对于一般的操作来说,使用EF可以加快开发效率,性能方面,如果做好优化,效果还是可以接受的,毕竟对于系统的维护和扩展有很大好处。对于性能,写好LINQ to Entity才是最关键的,而写好Linq2Entity,还需要对SQL有一定程度的了解,否则还是会搞的性能还不好。很多时候EF执行效率不好,很因为Linq2Entity query写的不好。如果还想接近底层的查询,可以写Entity SQL,或者直接执行SQL。

如果说是处理数据的比较繁重的逻辑部分,调用SP还是好的选择。现在用DBContext调用SP也非常简单方便了。而且可以直接将返回的Set封装。

这个问题没有必要选择谁,抛弃谁,在合适的地方用合适的工具,才是正确的选择。EF是工具,用来帮助我们解决问题,而不是用来主宰我们的开发方式。

Linq2SQL已经淡出了。

目前在EF5,有这么几种选择:
1. 已经有数据库: POCO+DBContext API
2. 没有数据库,如果你熟悉Code First,那就可以用Code First方式。如果不熟悉或者不习惯的话,可以先建立数据库,再用POCO+DBContext
POCO+DBContext还是比较适合用来做DDD的,分离Repostory和Model.

EF5 已经开源了,看源代码是最好的学习方式了。

评分

参与人数 3积分 +12 收起 理由
IsDonIsGood + 4 感谢分享
flyspirit + 5 你太有才了
+ 3 感谢分享

查看全部评分

发表于 2012-12-8 12:22 |显示全部楼层
此文章由 清风拂山岗 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 清风拂山岗 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这基本是有定论的东西,再讨论下去意义不大。还是好好看看Martin Fowler写的关于ORM的文章吧。

发表于 2012-12-9 22:24 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
清风拂山岗 发表于 2012-12-8 12:22
这基本是有定论的东西,再讨论下去意义不大。还是好好看看Martin Fowler写的关于ORM的文章吧。 ...

楼上是指这篇吧

ORMHate  http://martinfowler.com/bliki/OrmHate.html

Advertisement
Advertisement

发表于 2012-12-10 09:24 |显示全部楼层
此文章由 清风拂山岗 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 清风拂山岗 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Yes, that's the article I referred to. I have been using ORM for more than 6 years now, what he said in the article corresponds with my experience.

发表于 2012-12-10 21:18 |显示全部楼层
此文章由 thinkriver 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 thinkriver 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Essentially the ORM can handle about 80-90% of the mapping problems, but that last chunk always needs careful work by somebody who really understands how a relational database works.

This is where the criticism comes that ORM is a leaky abstraction. This is true, but isn't necessarily a reason to avoid them. Mapping to a relational database involves lots of repetitive, boiler-plate code. A framework that allows me to avoid 80% of that is worthwhile even if it is only 80%


这其实就是使用ORM的根本,不是说有了ORM就是万事大吉了。最重要的是,还得开发人员了解它,知道它长处和短处,并进而善加利用。最近在看MR的那本名著,这哥们真是个天才啊...

发表于 2012-12-18 23:40 |显示全部楼层
此文章由 kanjunhai 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kanjunhai 所有!转贴必须注明作者、出处和本声明,并保持内容完整
flyspirit 发表于 2012-12-7 09:50
LINQ2SQL is almost dead.

LINQ2SQL is still a better choice compare to EF if your db is SQL server.

发表于 2012-12-20 20:22 |显示全部楼层
此文章由 huaxianz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huaxianz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
joerkky 发表于 2012-12-7 16:58
这个问题要看是什么上下文了。

比如说用户下订单,需要进行两个操作,保存订单和更新存货量。如果是个很简 ...

没错。
很多商业领域的business transaction,需要几天甚至个把星期才能完成,比如amazon的订单整个lifetime,单纯用database transaction不可能实现。如果是纯sql server的环境,我建议用service broker来实现,非常高效。如果是混搭环境,就要用更为专业的整合系统比如BizTalk。自己实现过于复杂。
头像被屏蔽

禁止发言

发表于 2012-12-24 21:23 |显示全部楼层
此文章由 smbk 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 smbk 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你要愿意的换,依然可以用原来的sp,而且用sp有它的好处,性能上通常也略微快一点点,尽管通常这种性能差异都被忽略了。
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部