首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于MVC使用LINQ数据模型自动导入外键关系的效能有关问题

2012-09-27 
关于MVC使用LINQ数据模型自动导入外键关系的效能问题MVC新入门,使用linq模型直接导入数据表后,外键关系也

关于MVC使用LINQ数据模型自动导入外键关系的效能问题
MVC新入门,使用linq模型直接导入数据表后,外键关系也自动建立起来。我只想返回一两个表的关系,结果追踪发现方法会自动把所有关联表数据全部导入到对象中,如果对应数据多的话,对效能是不是有很大影响?如何解决
比如

C# code
return db.aspnet_User.SingleOrDefault(d => d.UserName == UserName)

我预期的目的是只返回这个表的数据,结果追踪发现方法会把其他表的关联数据也导进来
之前还傻乎乎的这么写
C# code
        public FullUserModelList FindAllUsers()        {            var fullUserModel = from aU in db.aspnet_User                                join aMs in db.aspnet_Membership on aU.UserId equals aMs.UserId                                join ue in db.M_UserExpand on aU.UserId equals ue.UserID                                join aUIR in db.aspnet_UsersInRoles on aMs.UserId equals aUIR.UserId                                join aR in db.aspnet_Roles on aUIR.RoleId equals aR.RoleId                                orderby aMs.CreateDate                                select new FullUserModel                                {                                    aspnet_User = aU,                                    aspnet_Membership = aMs,                                    aspnet_UsersInRoles = aUIR,                                    aspnet_Roles = aR,                                    M_UserExpand = ue                                };            return new FullUserModelList { FullUserModel = fullUserModel };        }


[解决办法]
在Linq中join连接不是左连接

左连接写法:
 
C# code
var b = new Modular.SparePartsModular();                    var re = b.GetALL();//查询出库存上下限                    var dt = ifs.getPorts(out _total, page, rows, no, desc, null).Tables[0];//ERP备件信息                    var ps = from d in dt.AsEnumerable()                             join r in re on d.Field<string>("part_no") equals r.IFSID into joinedEmpDept                             from dept in joinedEmpDept.DefaultIfEmpty()                             select new                                        {                                            IFSID = d.Field<string>("part_no"),                                            Description = d.Field<string>("Description"),                                            Num = d.Field<decimal>("count_variance"),                                            Unit = d.Field<string>("unit_meas"),                                            IN_TRANSIT = d.Field<decimal>("IN_TRANSIT"),                                            Price = d.Field<decimal>("price"),                                            MAX = dept != null ? dept.MAX : 0,                                            MIN = dept != null ? dept.MIN : 0,                                            interval = d.Field<decimal>("count_variance") > (dept != null ? dept.MIN : 0) ? 1 : 0//1安全,0不安全                                        }; 

热点排行