C#开发自学记录02-2 贪婪加载、依赖注入
好的,今天我们继续来学哈。
1、var elo = new EagerLoadOptions();
elo.LoadWith(SCWPDetail.SCPMProperty);
elo.LoadWithViewProperty();
贪婪加载(Eager Loading),目的是在查询主实体时自动加载其关联的导航属性数据,避免后续使用时触发延迟加载(Lazy Loading)导致的额外数据库查询。
LoadWith:声明主实体加载时必须同时加载的关联属性;
LoadWithViewProperty():强制加载视图属性(View Property),通常是计算字段、聚合结果或虚拟视图(非直接映射到数据库表的属性)。
2、 query.ToList(null, elo)
ToList<T>()是用于将其他类型的集合或查询结果 显式转换为 List<T>类型的集合。第一个参数null是分页参数,这里应该是用于忽略分页,可能会返回大量的数据。第二个参数elo是加载相关贪婪参数配置,自动加载 elo中指定的导航属性(如 LoadWith配置的关联表)。
3、在代码 lists.Where(...).ToList()中,最后的 ToList()会立即执行查询,并生成一个新的 List<T>表,不会更新原列表,而是生成一个包含过滤结果的新列表。
4、EntityList<T> datas = new EntityList<T>(); 这里是存储最终返回的结果数据。
5、var equipIds = list
.Where(p => p.T != null)
.Select(p => p.T.LineId)
.Distinct()
.ToList();
此处的代码按这样排版会好看一些,where用于筛选,select用于提取,distinct用于去重;tolist生成。若 list数据量大,多次 Where+ Select可能影响性能,可以反过来先提取再筛选;
6、部分字符解释:
6.1、在C#代码中,?.是 空条件运算符(Null-conditional operator),也称为安全导航运算符。它的作用是在访问对象的成员(属性、方法等)时,自动检查对象是否为 null,从而避免因对象为 null而抛出 NullReferenceException异常。
用法:object?.Member
如果 object为 null,整个表达式返回 null,不会继续访问 .Member。如果 object不为 null,正常访问 .Member。
6.2、X.Service.Resolve<T>()是一种 依赖注入(Dependency Injection, DI),此处T是控制器通过依赖注入容器(如Autofac、Unity)解析 Controller实例;
这个依赖注入一直说一个比较抽象的概念啊,我按自己查资料浅薄的理解描述下,就是类A有些功能需要借助类B实现,B是A的依赖,如果B在A的内部实例化的吧,两者就有较高的耦合,但是若B需要更改的话,A就也要跟着改很多地方很麻烦,所以把B从A里剥离出来,控制权交给一个第三方我们称为控制反转(IOC Inversion Of Control)容器,再注入A里,完成A和B的解耦。
引知乎大佬回答,总的一句话就是:本来A接受各种参数来构造一个对象,现在只接受一个参数——已经实例化的对象。
这篇先到这吧.
更多推荐

所有评论(0)