博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF架构~简洁关联表插入,优越的代码性能!
阅读量:6900 次
发布时间:2019-06-27

本文共 2434 字,大约阅读时间需要 8 分钟。

entity frameworks给我们代来的不只是操作方便,代码简洁,代码人性化强,而且更重要的是它的代码执行效率也是可以信任的,这一点对于我们来说十分重要,因为对于ORM来说,你再使用方便,再容易上手,如果你的性能低下,我估计也没人爱用,呵呵。

今天主要说一下entity frameworks中的关联表插入问题,我们以订单业务为例来说一下:

一 数据结果图如下:

二 在EF中,数据结构关联图会体现在模型里,并且同时会生成在实体中,它以导航属性的形式出现,如图:

public partial class Order_Info    {        public Order_Info()        {            this.Order_Detail = new HashSet
(); } public int OrderID { get; set; } public int UserID { get; set; } public System.DateTime CreateDate { get; set; } public virtual ICollection
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
(item); _db.Set
().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
{ 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在代码执行效率上是可以信任的,呵呵。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
LoaderManager使用具体解释(四)---实例:AppListLoader
查看>>
软件系统的架构设计
查看>>
poj1159--Palindrome(dp:最长公共子序列变形 + 滚动数组)
查看>>
Codeforces #282 div 1 C Helping People 题解
查看>>
Java华氏转摄氏
查看>>
centos6.8服务器配置之编译安装PHP、配置nginx
查看>>
ddddddd
查看>>
Android 开发之 ---- 底层驱动开发(一)
查看>>
分享到朋友圈实现
查看>>
SQL Server 用链接服务器 同步SqlServer与MySQL
查看>>
Android程序的打包和安装
查看>>
Android内存优化6 了解Android是如何管理App内存
查看>>
SpringBoot2 添加应用拦截器
查看>>
es删除文档或者删除索引
查看>>
swift可选值总结
查看>>
深入理解Java虚拟机06--虚拟机字节码执行引擎
查看>>
C# 委托和事件,简单示例说明问题
查看>>
『转载』转过来的Xpath语法
查看>>
编码:隐匿在计算机软硬件背后的语言
查看>>
object-c中NSString字符串匹配操作
查看>>