首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现

所以,我在开发中会寻找是否支持配置类,如果使用配置类或者在ORM框架中设置映射关系,那么就可以保证数据层的纯净,也能实现对调用方隐藏实现。...public void Insert(params T[] entities) { Set.AddRange(entities); } public void Insert(IEnumerable...); } 在修改接口里,我预留了几个方法没有实现,因为这几个方法使用EF Core自身可以实现,但实现会比较麻烦,所以这里借助一个EF Core的插件: dotnet add package Z.EntityFramework.Plus.EFCore...这是一个免费开源的插件,可以直接使用。...> predicate) { return Set.Any(predicate); } 这里有一个需要关注的地方,在使用条件查询单个数据的时候,我使用了SingleOrDefault而不是FirstOrDefault

1.6K40

C# list介绍

该类使用大小可按需动态增加的数组实现 IListT> 泛型接口。 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。...二、性能注意事项: 在决定使用IListT> 还是使用ArrayList类(两者具有类似的功能)时,记住IListT> 类在大多数情况下执行得更好并且是类型安全的。...如果对IListT> 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。...如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。”...Remove(T item) 删除一个值 E.g.: mList.Remove(“Hunter”); 2、 List.

36410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现

    如果您觉得我的实现过程有所不妥的话,您可以在评论区留言,或者加入我们的千人.Net Core实战项目交流群637326624交流。另外如果您觉得我的文章对您有所帮助的话希望给个推荐以示支持。...项目的源代码我会托管在GayHub上,地址在文章末尾会给出,自认为代码写的很工整,注释也很全,你应该能看懂 写在前面 将近一周没有更新,鬼知道我这么长时间在干什么,你可以认为我在憋大招,在想着怎么给大家分享更多更实用的东西...Dapper的封装 IDbConnection工厂类的封装 这部分我实现了一个IDbConnection的工厂类,以便你可以很方便的根据数据库的类型来创建不同的IDbConnection对象,目前已实现对...Insert(T entity) => _dbConnection.Insert(entity); public int Update(T entity) => _dbConnection.Update...我在16号就已经写好了,为什么这么晚才写博客分享出来呢?因为我懒~~~~~~~ 这里需要注意,需要安装SimpleCRUD的Nuget包。

    97220

    【愚公系列】2023年03月 MES生产制造执行系统-002.Dapper和EFCode的使用

    文章目录 前言 1.Dapper 2.EF 一、Dapper和EFCode的使用的使用 1.数据库相关服务注入 1.1 DBServerProvider 1.2 Dapper的使用 1.3 EFCode...Dapper 是 .NET 的简单对象映射器,在速度方面拥有 Micro ORM 之王的称号,几乎与使用原始 ADO.NET 数据读取器一样快。...ORM是一个对象关系映射器,负责数据库和编程语言之间的映射。 Dapper 是一个流行的开源 .NET 对象关系映射 (ORM) 库。 通过将对象映射到数据库中的表,可以轻松地处理应用程序中的数据。...它非常易于使用,并具有许多功能,使其成为数据访问的强大工具。 Dapper 比实体框架更快,用于 CRUD 操作(查询和保存),因为它很简单。...使用实体框架,开发人员在处理数据时可以在更高的抽象级别上工作,并且与传统应用程序相比,可以使用更少的代码创建和维护面向数据的应用程序。

    1.5K30

    LINQ驱动数据的查询功能

    1.1 LINQ VS 循环处理       在我刚工作时候,对于集合对象的处理一般是采用循环这个集合处理,在处理实值类型上这样做效率还行,但是如果集合内是引用类型,使用LINQ就方便的多,例如一个程序要计算课程的总分和平均分...命名空间都已实现 IEnumerableT>,一般来说在.NET内的所有集合对象都能使用LINQ进行处理,如果不引用System.Linq命名空间,所有Linq功能都无法使用。...其中有几点限制:       (1)  匿名类型只在同一个函数内,如果要在其他函数共享必须动用Reflection或者是利用.NET4.0提供的动态类型机制。      ...var的限制如下: (1)使用var类型赋值语句时右边不能为null,否则编译器无法推断其类型。 (2)var类型只能用于局部变量的声明,不能用于全局变量,类层变量或者是函数的返回值。...IEnumerable selectMany = list1.SelectMany(t=>list2).ToList(); 也可以写成   IEnumerable selectMany

    2.9K90

    设计一个 .NET 可用的弱引用集合(可用来做缓存池使用)

    虽然一般不推荐这么设计,但是你可以使用本文所述的方法和代码作为按垃圾回收缓存的缓存池的设计。...你可以参考我的另一篇博客了解设计这种不确定类型的 API 的时候的一些指导: 如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全 总结起来就是: 必须提供一个单一的方法...,Add、Clear、Remove 是在修改状态,而 Insert、RemoveAt 会在修改状态的同时读取状态。...IEnumerableT> IEnumerableT> 里面只有两个方法,看起来少多了,那么我们能用吗?...对于并发可以使用锁,但对于弱引用,没有可以使用的相关方法来快速解决问题。 因此,IEnumerableT> 也是不能继承的。 object 看来,我们只能继承自单纯的 object 基类了。

    17640

    【源码解读(二)】EFCORE源码解读之查询都做了什么以及如何自定义批量插入

    (10).ToList();这个语句的执行,都经历了哪些,众所周知,DBSet实现了IQueryable的接口,所以我们在调用的时候是可以使用Queryable里面的扩展方法的,例如上面的语句中,Take...listProvider.ToList() : new List(source); } public List(IEnumerableT> collection)...是在DataBase抽象类下的,还记得我们需要在EF执行的时候打印Sql语句需要UseLogger吗,我没记错的话,日志是在这个构建里面去开始触发写Sql的事件的,这里的Logger,再看下去,就会看到...EventId,EventData,包括了执行的类型,数据语句都可以获取的到,在往下面走,就是表达式的遍历,以及不同数据库的需要做不同的处理,这里很多我没细看,感兴趣的可以自己去看看。...最终调用结束在List的构造函数里去创建一个新的List,GetEnumerable返回了我们本次的查询结果。

    38850

    C#基础知识系列十(集合)

    直接存储,是指该类型的集合数据元素可以直接通过下标(即index)来访问,在C#中直接存储的数据结构有三类:Array(包含数组和ListT>)、string、struct。   ...线性表有可以分为队列、栈以及索引群集,在C#中分别表现为:QueueT>、StackT>,索引群集又进一步泛化为字典类型Dictionary和双向链表LinkedList<...1、intArray=new int[3]; 2、intArray=new int[]{1,2,3}; 3、int[] intArray={1,2,3};  数组在声明和初始化后,可以使用索引器进行访问...在测试过程中发现ListT>与ArrayList的操作基本完全类似。主要也是它们共同继承了IList,ICollection,IEnumerable三个接口。...T当然也可以是自定义的类型,这也是我们在日常的编程中应用最为广泛的。

    68930

    .net源码分析 – List

    IList是集合的操作接口,支持索引器,Add, Remove, Insert, Contains等操作。...如果新得到的长度比传进来的min小的话则就用min,也就是选大的,这种情况在InsertRange时有可能发生,因为insert的list很可能比当前list的元素个数多。...Add函数里还有个_version++,这个_version可以在很多方法里看到,如remove, insert, sort等,但凡要修改集合都需要_version++。...其他大部分方法都是通过Array的静态函数实现,不多说,需要注意的是ListT>继承自IList,所以可以转成IList,转之后泛型就没了,如果是List,转成IList的话和IListListT>并非线程安全,任何使用的时候都要考虑当前环境是否可能有多线程存在,是否需要用锁来保证集合线程安全。

    73280

    批量添删改操作(提升吞吐率)

    整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。...= "name" + i }); } list.Insert(true); 这是一个对IEnumerable的扩展方法,在支持批量插入的数据库上走批量插入流程,其它走for循环插入。...在XCode中,强烈建议仅在百万级以上数据表中使用批量插入技术,不建议几十几百行的表也使用,因为它有一些缺点,譬如插入后无法得到自增ID,跟普通循环逐行插入的行为不同。...来看看批量更新的两个扩展 public static Int32 UpdateT>(this IEnumerableT> list, Boolean?...useTransition = null) where T : IEntity; public static Int32 BatchUpdateT>(this IEnumerableT> list,

    62320

    C# 基础知识系列- 3 集合数组

    与其他(java)语言不同的一点是,C#的List是类,而不是接口,接口是IList,但这个接口意义不大,在使用IList的时候更多的倾向于使用IEnumerable,这主要是因为IEnumerable...List列表通过元素数量实现了Add和Remove 的操作,列表对象操作引发元素数量变动时都会导致对容量的重新计算,如果现有容量不满足后续操作需要的话,将会对现有数组进行扩充。...)或InsertRange(int index,IEnumerableT> items) 插入 Insert(int index,T item) 在 index 下标处插入一个元素,该下标以及该下标以后的元素依次后移...因为Set集合中存放对于使用者而言是乱序存放的。我们常用的Set集合有 HashSetT>和SortSetT>,其他的Set相关类则属于更加少见。至少在我5年多的开发经历中没有用过。...共享集合,使其使用者可以确保集合永远不会发生更改。 提供多线程应用程序中的隐式线程安全(无需锁来访问集合)。 遵循函数编程做法。 在枚举过程中修改集合,同时确保该原始集合不会更改。

    1.3K30

    自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

    看代码应该是 equals 比较时产生的,一次比较就有2个point被装箱放到托管堆上,这下惨了,,,而且大家应该知道引用对象本身还有(8+8) byte 自带开销,这在时间和空间上都是巨大的浪费呀。。...遇到问题 很多时候我们会定义各种泛型类,在泛型操作中通常会涉及到T之间的 equals, 比如下面我设计的一段代码,为了方便,我把Point的默认Equals也重写一下。...,虽然是成功了,但有一个地方让我不是很舒服,就是上面的第二行代码,在 TProxyT> 处约束了T,因为我翻看List的实现也没做这样的泛型约束呀,可能有点强迫症吧,贴一下代码给大家看看。...public class ListT> : IListT>, ICollectionT>, IEnumerableT>, IEnumerable, IList, ICollection, IReadOnlyList...从图中可以看到最终还是对T进行了IEquatableT>约束,不过这里给提取出来了,还是挺厉害的,然后我也学的模仿一下: ? 可以看到也走了我的自定义实现,两种方式大家都可以用哈。

    33820

    .NET面试题系列 - LINQ to SQL与IQueryable

    它令IQueryable和IEnumerable一样,拥有强大的查询能力。 AsQueryable方法将IEnumerableT>转换为IQueryableT>。...不过,我在这里就仅以此为例,解释下如何扩展并为表达式树解析增加更多的功能,使之可以应付更多类型的表达式。 IQueryable与 IEnumerable的异同?...首先IQueryableT>是解析一棵树,IEnumerableT>则是使用委托。前者的手动实现上面已经讲解了(最基本的情况),而后者你完全可以用泛型委托来实现。...而使用IEnumerableT>,所有对于IEnumerableT>的过滤,排序等操作,都是在内存中发生的。也就是说数据已经从数据库中获取到了内存中,在内存中进行过滤和排序操作。...当数据源不在本地时,因为IEnumerableT>查询必须在本地执行,所以执行查询前我们必须把所有的数据加载到本地。

    1.7K10

    30分钟LINQ教程

    我们希望他们在使用我们设计的泛型类型时         不要很随意的传入任何类型         对于泛型类型的设计者来说,要求使用者传入指定的类型是很有必要的         因为我们只有知道他传入了什么东西...where T:MyObj         这样在使用SomethingFactory的时候就只能传入MyObj类型或MyObj的派生类型啦         注意:           还可以写成这样...来看看List的类型签名:           public class ListT> : IListT>, ICollectionT>, IEnumerableT>, IList, ICollection...               在foreach时不要试图对被遍历的集合进行remove和add等操作         任何集合,即使被标记为线程安全的,在foreach的时候,增加项和移除项的操作都会导致异常...      也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法       来看看这段代码:       List arr = new List<

    80520

    最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary

    可使用Foreach关键字实现数组迭代和查找。 因为数组大小是固定的,且是强类型数据结构,因此在运行时只占用很少的内存,运行时效率很高。 ?...List长度可不固定 2. 当数据为通用类型,List是强类型,List中元素类型不需要等到运行时来确定,这种特性使得List 运行时效率非常高。 3. 可使用Foreach关键字。...如果你无法判断代码改动的可能性,可以使用IList接口,减少模块之间的依赖性。IList是接口因此无法被实例化,所以必须使用List来初始化。...在内部类中可以定义变量并赋值,接口中不允许此操作。 3. 具体类可包含构造函数,而接口中不能定义构造函数 4. 抽象类中可包含访问修饰符如public,private等,接口中不能包含。 ?...IEnumerable常用于遍历集合元素,但是无法修改(删除或添加)数据,使用IEnumberable 会从服务器端将所有数据拷贝到客户端,并进行一定的过滤,如果服务器端有大量数据会造成内存负载超重。

    2K80

    C#集合类型大盘点

    ICollection 与ICollectionT> 略有不同,ICollection不提供编辑集合的功能,即Add和Remove。包括检查元素是否存在Contains也不支持。...IndexOf, Insert, RemoveAt等等。我们可以这样说,IEnumerable支持的功能最少,只有遍历。而ICollection支持的功能稍微多一点,不仅有遍历还有维护这个集合的功能。...也就是说添加和移除操作都是线性的,时间复杂度是O(n),因为操作其中的元素可能导致所有的数据移动。但是因为在查找的时候利用了二分搜索,所以查找的性能会好一些,时间复杂度是O(log n)。...LinkedList 使用者可以精确控制元素的位置 否 不支持 Value: O(n) O(1) 最适合不需要直接访问单个元素,但是在集合中添加/移除非常频繁的场景。...现在基本上我们已经不使用这些集合类了,除非在做一些和老代码保持兼容的工作的时候。来看看1.0时代的.NET程序员们都有哪些集合类可以用。 ArraryList 后来被ListT>替代。

    1.1K70
    领券