首页
学习
活动
专区
圈层
工具
发布

如何运用领域驱动设计 - 存储库

那么请思考两个点:1、该实体是否需要提升为聚合根。 2、如果是广泛查询的报表,可能并不需要通过仓储来获取对象,需要专门的查询框架来完成。...通过返回一个IQueryable对象,甚至可以将业务查询逻辑直接放到应用层,这样想怎么操作就怎么操作。 请注意!!!这非常的危险!!!! 您可能会问了:“我平时所接触的框架或者仓储不都是这样写的吗?...可以实现我任何的业务查询,爽歪歪。” 但是这样写正在逐渐丧失存储库原有的作用。回到开篇提到的一个问题:假如使用了EF这样的ORM框架,为什么还需要嵌套一层仓储呢?...要么就是将存储库的规则打破,直接查询利用EF Core查询出IQueryable集合对象,然后一顿输出猛如虎来达到效果。...记住不要为了使用DDD而让您的开发变得复杂而不顺手,在这个时候我们甚至可以不使用存储库,我们可以利用另外的框架来直接查询数据库,也或者是使用ADO.NET运用原生Sql来达到查询的效果。

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

    EF Core关系配置

    IQueryable的复用 IQueryable是一个待查询的逻辑,因此它是可以被重复使用的 IQueryable books = ctx.Books.Where(b => b.Price...ADO.NET Core Provider是不支持多个DataReader同时执行的。...执行实体相关查询原生SQL语句 如果要执行的原生SQL是一个查询语句,并且查询的结果也能对应一个实体,就可以调用对应实体的DbSet的FromSqlInterpolated()方法来执行一个查询SQL...只能单表查询,不能使用Join语句进行关联查询。但是可以在查询后面使用Include()来进行关联数据的获取。...; Tips:一般只有在编写不特定于某个实体类的通用框架的时候,由于无法在编译器确定要操作的类名、属性等,所以才需要编写动态构建表达式树的代码。

    76810

    .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst

    目的在于通过要点的梳理最后串联起整个跨平台框架。之前的几篇算是把框架重要设计和框架重要知识点复习了,当然什么系统都可能使用到ORM框架。...生成的sqlite数据库如图,因为我们定义了Student、Course实体,所以会生成两个表以及表的字段,同时还会生成一个历史表,用于记录我们每次迁移的记录。...同时我们查询学生的话理论上也能查出学生拥有的课程,接下来我们向数据库中插入数据并进行查询。...Iqueryable的作用和数据延迟加载,在我们查询数据的时候列表数据以Iqueryable类型返回,如果我们不是调用获取结果api,则不会立即查询数据库,而是等到使用tolist()、count()、...AsNoTracking使用,EFCore默认会跟踪实体,也就是保存在内存中,用于更新删除等操作。如果只是查询数据而不用跟踪则使用AsNoTracking查询。 并发控制。 .....

    4.1K30

    【愚公系列】2023年02月 .NETC#知识点-使用控制台手搭webapi框架

    文章目录 前言 一、使用控制台手搭webapi框架 1.配置文件 2.控制台配置 二、EFCore框架DBSet配置详解 1.实体统一配置 2.实体继承统一接口 3.获取程序集所有类 4.批量注入模型类到...(如Web服务器)之间进行通信。...本文涉及的知识量巨大主要有如下: EFCore Autofac Serilog Swagger 非常多底层知识 一、使用控制台手搭webapi框架 1.配置文件 appsettings.Development.json...LibraryDbContext和EFCoreEleganceUseEFCoreModule,下面着重详解 二、EFCore框架DBSet配置详解 1.实体统一配置 EF实体继承统一的接口,方便我们反射获取所有...EF实体,接口可以设置一个泛型,来泛化我们的主键类型,因为可能存在不同的表的主键类型也不一样。

    1.7K10

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

    将查询表达式转换为SQL语句并不保证一定可以成功。 IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。...它令IQueryable和IEnumerable一样,拥有强大的查询能力。 AsQueryable方法将IEnumerable转换为IQueryable。...拥有连接数据库,简单执行sql语句(不需要返回值,用于DDL或delete语句)和通过执行Sql语句,返回若干实体的功能(用于select语句)。...仍然是使用我们自己的查询提供器的逻辑,执行SQL,输出正确的值。...可以得出正确的结果(test只有1笔输出),但使用自己的查询提供器,获得的SQL却是错误的(第一个Sex = M不见了)。

    2.1K10

    C# 一分钟浅谈:GraphQL 安全性考虑

    本文将从常见的安全问题出发,探讨如何在 C# 中实现安全的 GraphQL API。 常见的安全问题 1....深度嵌套查询 (N+1 查询问题) 深度嵌套查询可能导致数据库查询次数激增,影响性能。 解决方案 批处理查询:使用批处理工具(如 DataLoader)来优化查询。...限制查询深度:设置最大查询深度,防止无限嵌套。...解决方案 参数化查询:使用参数化查询来防止 SQL 注入。 ORM 框架:使用 ORM 框架(如 Entity Framework)来管理数据库操作。...避免方法:使用参数化查询或 ORM 框架,严格验证和过滤客户端输入。 3. 缺乏性能优化 易错点:忽视性能优化,导致 API 在高并发情况下表现不佳。

    34610

    解决Entity Framework查询匿名对象后的跨域访问的一种方式

    在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递。...但是很多时候,我们不需要把整个表的字段都查出来,如果我们直接把整个数据实体查询出来,就极大的影响了性能,所以我们需要通过查询匿名对象或者已经定义的方式,对数据库进行查询; 1.实例使用的数据实体类: public...类型,在调用方法处可以直接遍历; 然而,当没有CategoryView的时候,我们就只能使用匿名对象进行查询: var data = from c in context.Categoriees...,而是展开为表达式数的形式,在最后执行期间使用代理去执行调用的方法,是对匿名类型的调用比使用反射机制更加高效便捷了,所以,对于上述实例,可以使用如下方式进行调用: foreach (dynamic item...UI层链接的服务层,我仍然推荐使用查询ViewModel的方式

    95630

    Asp.Net Core 扩展 Linq,简化自定义

    甚至在有些时候需要三个同时处理来更精确的筛选数据,而对于 Asp.Net Core 来说,用的语言是 C#,是一门强类型语言,在许多时候具有很大便利性,但是正因为这种原因,在某些时候却不太方便使用,需要进行额外方式来进行处理...出来属性进行查询的,但是实际使用中,从前端传递过来的一般都是字符串 "Name",而在后端进行查询时,以目前方式是无法将属性的key写到where函数中,也就无法执行查询通过"Name"来过滤数据;如果通过...if...else 来判断,那么将会是一个非常大的工程量,每个实体上面有 m 个属性,而一个项目中有 n 张表,那么几乎需要 m*n个判断进行处理,非常的差劲,不利于后续扩展和维护。...","SerarchKeyword").OrderBy("PropertyName",1); } 更进一步 当然在上面我们也定义了通用的查询条件,那么我们直接也可以再进一步扩展,来达到更好的使用方式 public...方便使用,规范查询数据

    2.1K10

    .NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

    最为常见的就是遍历树形结构的对象,如:XML,它的每个节点都是一样的对象,所以递归调用的方法也是同一个方法,只不过不断的调用将产生多个调用栈,最后在按照调用顺序的反向出栈就得出一个完整的数据结构。...那么在LINQ中来说,我们无法通过一个方法多次调用来产生我们想要的表达式树,一个Where查询表达式扩展方法可能不仅仅是被LINQ查询表达式所使用,还有可能被ORM的入口方法所使用,比如Update更新的时候就需要...详情可以参见本人的“NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)”一文; 3】.LINQ查询表达式和链式查询方法其实都是空壳子 LINQ的真正意图是在方便我们构建表达式树...LINQ的查询表达式是通过扩展方法横向支撑的,你不用LINQ也一样可以直接使用各个扩展方法,但是那样会很麻烦,开发速度会很慢,最大的问题不在于此,而是没有统一的查询方式来查询所有的数据源。...ORM一直是我们比较喜欢去写的框架,这里就使用自定义的IQueryable来查询相应的对象实体。首先我们需要继承IQueryable接口来让LINQ能查询我们自己的数据上下文。

    1.4K30

    ASP.NET Web API对OData的支持

    开放数据协议(OData)是一个查询和更新数据的Web协议。OData应用了web技术如HTTP、Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务和存储的信息访问。...除了提供一些基本的操作(像增删改查),也提供了一些高级的操作类似过滤数据和实体的导航。OData扩展了上述的协议但是不是取代他们。...最后,决定想要查询的东西,通过比如邮政编码来查询。   首先是,没有创建泛型客户端的途径,而这些和API紧密联系,因为它不知道参数的顺序或者模式被使用的顺序。...我将使用Fiddler去测试这个服务 ? ? 我们没有写任何一个特别的逻辑去支持这些功能,全部都由框架来提供的。是不是OData为你的搜索、过滤、或者分页API的时候提供了一个很好的选项。...Hongmei还演示了高级场景中的查询验证,如为$skip、$top、$orderby、$filter自定义默认验证逻辑,以及使用ODataQueryOptions来验证查询。

    3.2K50

    金三银四面试:C#.NET面试题中高级篇5-Linq和EF

    实体框架EF是http://ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。...ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的互相转换。 (表实体跟表之间的相互转换) ORM框架有很多,EF框架是ORM框架的其中一种,是实现了ORM思想的框架。...提升从数据库中拿数据的速度,可以参考以下几种方法: 1).在数据库中的表中定义合适的索引和键 2).只获得你需要的列(使用ViewModel或者改进查询)和行(使用IQueryable)...一般来说,返回另外一个序列(通常为IEnumerable或IQueryable)的操作,使用延迟执行,而返回单一值的运算,使用立即执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 10.除了EF,列举出你知道的ORM框架?

    5.4K30

    DDD理论学习系列(12)-- 仓储

    DDD中的仓储 2.1. 仓储的集合特性 仓储代表一个聚合的集合,其行为与.Net集合一样,仓储用来存储和删除聚合,但同时提供针对聚合的显式查询以及汇总。 2.2....而恰巧这正是仓储的要点。基础持久化框架提供了开放的接口用于对数据模型的查找和修改,而仓储通过使用定义的命名查询方法来限制对聚合的访问。...IQueryable Vs IEnumerable 在定义仓储方法的返回值时,我们可能会比较疑惑,是应该直接返回数据(IEnumerable)还是返回查询(IQueryable)以便进行进一步的细化查询...返回IEnumerable会比较安全,但IQueryable提供了更好的灵活性。事实上,如果使用IQueryable作为返回值,我们仅提供一种读取数据的方法即可进行各种查询。...比如,在实体中我们一般使用IsActive或IsDeleted属性来表示软删除,而一旦实体中的某条数据被删除,那么UI中基本不会再显示这条数据,那对于实体的查询都需要包含类似Where(c=> c.IsActive

    2.2K70

    使用ORM框架,必须迁就数据库的设计吗?

    如果是简单,lz的这套语法/函数还是略显复杂。 (4)对于一款面向.NET的ORM框架,如果不兼容 IQueryable 接口是一种相当大的遗憾。...lz因为既是使用者,又是开发者,所以有思维定势——如果我100%是这个框架的编写者,或者我对框架的所有实现完全掌握,我甚至会考虑使用自己的框架代替通用的ORM。...(7)有没有能够说服我使用它可能并不是一个简单的例子,查询几条记录,事实上对比所有同类产品,实现这样的功能都很容易。...--框架的主要特点是具有iBatis的SQL-MAP功能和支持.NET 2.0的面向对象方式的查询表达式OQL,定位是简单易用,在使用 SQL-MAP的时候,只需要写好SQL语句,有代码工具自动生成DAL...比如自定义函数和SQL类型等等 --PDF.NET的实体类本着从简的原则,实体类没有引入复杂关系的概念,遇到这些复杂的查询,可以使用SQL-MAP功能,它可以将DataReader的结果读入实体类中;

    2.4K90

    .NET深入解析LINQ框架(二:LINQ优雅的前奏)

    如果我需要添加其他的条件就必须为Base_Deptment类型参数 model添加值才能使用,现在我想通过链式设计模式扩展它成为链式查询的使用方式,如: 1 /// 2...在使用IEnumerable和IQueryable之间的区别是什么?如何很好的理解这两者在LINQ的整个框架中的关系。...2.4.深入IQueryable、IQueryable、Queryable(LINQ to Provider框架的入口) IQueryable接口是提供给我们来实现自定义数据源用的,为了支持强类型的数据源集合我们直接使用...IQueryable接口,当我们使用LINQ来查询IQueryable接口时查询表达式会被直接编译成对应的Queryable静态类中的对应的静态扩展方法。...2.6.整体梳理LINQ的框架原理 通过上面的详细的介绍我们对LINQ的框架基本掌握了,如果只是使用它其实是很简单的,只要熟悉LINQ的查询语法就行了,但是我想我们每个程序员都有很强的好奇心,想搞懂框架的设计原理

    2.6K30

    在VS中调试LINQ(Lambda)

    IEnumerable.AsQueryable().AsEnumerable()是没问题的,遵循IEnumerable的正常流程:断点不会转移,仍然是延迟执行。...,我们可以在里面设置条件和操作(可以同时勾选设置)。...参考 如何在C#中调试LINQ查询:https://michaelscodingspot.com/debug-linq-in-csharp/ C#中的条件断点:https://www.c-sharpcorner.com...使用OzCode VS插件OzCode很强大,每一个Linq语句的执行结果都能统计并展示出来,详情参考:如何在C#中调试LINQ查询 和 如何在C#中调试LINQ查询 使用LinqPad LinqPad...软件很强大,不过数据源是个问题,操作步骤参考:如何在C#中调试LINQ查询 和 如何在C#中调试LINQ查询 参考 2017年调试LINQ:LINQPad与OzCode:https://oz-code.com

    5.9K30

    .NET面试基础知识

    类型成员(字段、属性、构造函数、方法等)可以拥有所有的访问修饰符。 类及其成员的默认访问修饰符 ? 如果没有指定访问修饰符, 内部是类的默认值, 成员默认为private。...IEnumerator 这些都是向前使用的,并且只读取一个集合的访问权限。 ? IEnumerable使用IEnumerator,它可以与foreach语句一起使用。...IQueryable 们都可以用于向前数据访问。 ? IEnumerable 以从内存集合中查询数据(比如,列表) 它在内存中加载数据(服务器端到客户端),同时从数据库查询数据,然后过滤客户端数据。...IQueryable 可以从内存之外查询数据(服务器端类、远程数据库、web服务) 它在数据库查询时过滤服务器端的数据,然后发送到客户端。...EFcore开发方法 实体框架(EF) Core 2.0不支持DB模型(edmx)的可视化设计器或向导。EF Core只支持两种开发方法, Code-First Database-First. ?

    1.1K20
    领券