EF架构~简洁关联表插入,优越的代码性能!
entity frameworks给我们代来的不只是操作方便,代码简洁,代码人性化强,而且更重要的是它的代码执行效率也是可以信任的,这一点对于我们来说十分重要,因为对于ORM来说,你再使用方便,再容易上手,如果你的性能低下,我估计也没人爱用,呵呵。
今天主要说一下entity frameworks中的关联表插入问题,我们以订单业务为例来说一下:
一 数据结果图如下:
二 在EF中,数据结构关联图会体现在模型里,并且同时会生成在实体中,它以导航属性的形式出现,如图:
public partial class Order_Info { public Order_Info() { this.Order_Detail = new HashSet<Order_Detail>(); } public int OrderID { get; set; } public int UserID { get; set; } public System.DateTime CreateDate { get; set; } public virtual ICollection<Order_Detail> Order_Detail { get; set; } }
三 使用我们封装好的Add方法,将order_info实体插入,如果order_info里的Order_Detail属性的Count大于0,将会建立Order_info对象的add方法,这一切
由EF内部自动实现,看代码:
public void Add(T item) { this.Add(item, true); } public void Add(T item, bool isSubmit) { _db.Entry<T>(item); _db.Set<T>().Add(item); if (isSubmit) this.SaveChanges(); }
四 为order_info 和order_detail赋值,如果它们已经存在了表关联,那么在order_detail里,你不需要为orderid赋值,因为它在.net环境中,还没有确定值
(order_info与order_detail主键都是自增的)。
public void InsertOrder(Domain.Entities.Order_Info entity) { using (TransactionScope trans = new TransactionScope()) { try { base.Add(entity); trans.Complete(); } catch (Exception) { throw; } } }
Order_Info entity = new Order_Info { CreateDate = DateTime.Now, UserID = 1, Order_Detail = new List<Order_Detail> { new Order_Detail { ProductID=1, ProductName="香蕉1" }, new Order_Detail { ProductID=2, ProductName="香蕉2" } } }; new OrderRepository().InsertOrder(entity);
而如果你不建立表关系,你必须自己去做数据插入及orderid赋值的工作,而且更重要的是它生成的SQL代码的性能是低下的,所以,使用EF ORM需要为数据表
做关系,不要愉这个懒,因为这个关系做的值!
四 这个方法所产生的SQL语句是我们可以接受的,通过sql profiler进行代码监控,代码生成如图:
总结:EF为我们生成的SQL语句只建立了一次SQL连接,将insert语句批量发给sqlserver,而这种方式我们是可以接受的,很多ORM工具对于这种情况,将生
成多次connection连接,性能不言而喻,所以,EF在代码执行效率上是可以信任的,呵呵。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了