Rafy 快一两年没有大的更新了。并不是这个框架没人维护了。相反,主要是因为自己的项目、以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加。...但是最近因为外面使用了 Rafy 的几个公司,找到我,提出了一些明确的需求,期望我做一些相应的升级。所以可能最近几个月,会陆续更新 Rafy 框架。...最近升级后,可能截止到明年,会陆续支持 NET5-6 上的一些功能。 今天这篇博客,主要是记录了一个客户提出了多次的需求:实体更新时,只更新改动的字段。...但是这次客户提出意见,由于他们的实体类中的属性实在太多了,查看日志中的更新语句时,较难定位具体已经修改的属性。再加之,Rafy 接下来会添加一个只查询部分实体属性的功能。所以就一并完成了。...,也只更新变更后的属性了: UPDATE [Users] SET [UserName] = 'nameChanged;' WHERE [Id] = 2968;
Linq to Sql中,如果我们想在DataContext外部修改一个实体的值,然后把引用传入到DataContext中,再利用Attach附加后更新,代码如下: public static void... { db.myData.Attach(_pDate, db.myData.Single(c => c.ID == _pDate.ID));//将会出异常:“不能添加其键已在使用中的实体...myData _pDate = new myData() { ID = 1, IP = "127.0.0.1" }; UpdateMyTable(_pData); 运行时,会抛出异常:不能添加其键已在使用中的实体...原因我就不分析了,个人理解大致意思就是外部的对象跟DataContext上下文没关联,而Attach又不成功,所以当然也就更新不了....这种方法当然是可行的,但是有点笨,这种不应该由人来干的傻活儿最好由电脑来完成(见下面的方法) 2.利用反射自动复制属性 先写一个方法,利用反射获取属性信息实现自动copy属性值 public static
Attribute)的方式应用到相应的数据实体类的属性上,ValidatorAttribute是这些特性的基类; ValidationError:在Validator进行数据验证的时候,如果数据实体对象顺利通过验证...如下面的代码所示,Validator具有一个MessageTemplate的属性,表示验证错误信息的模板,该模板具有一些预定义的占位符。...由于CompositeValidator具有一个以IEnumerable对象体现的验证器元素的列表,在ValidatorElementAttribute的CreateValidator...WCF扩展让验证工作自动执行; 通过Resource的方式定义验证消息模板,可以获得多语言文化的支持 其他 采用一个自创的"验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证...[设计篇] 采用一个自创的"验证框架"实现对数据实体的验证[改进篇] 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]
昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。...值得一提的是:指定的验证消息时一个消息模板,我们可以指定相应的站位符,比如{PropertyName}、{PropertyValue}、{Tag},它们分别表示对应属性的属性名、属性值和自定义的Tag(...六、对多验证规则的支持 实体的验证应该是场景驱动的,对于同一中类型的对象,不同的场景决定不同的验证规则。对于“找对象”为例,不同的人具有不同的择偶标准,同一个人在不同的年龄阶段的择偶标准也不可能相同。...所以,一个好的验证框架应该具有定义多中验证规则的能力。 同样以上面的例子来说明,对于Mate类型,我希望为不同的人(比如张三和李四)定义不同的验证规则。...采用一个自创的"验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证[设计篇] 采用一个自创的"验证框架"实现对数据实体的验证[改进篇] 采用一个自创的"验证框架
实体框架EF是http://ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。...ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的互相转换。 (表实体跟表之间的相互转换) ORM框架有很多,EF框架是ORM框架的其中一种,是实现了ORM思想的框架。...Unchanged:实体将由上下文跟踪并存在于数据库中,其属性值与数据库中的值相同。 Added:实体将由上下文跟踪,但是在数据库中还不存在。...Deleted:实体将由上下文跟踪并存在于数据库中,但是已被标记为在下次调用 SaveChanges 时从数据库中删除。...Modified:实体将由上下文跟踪并存在于数据库中,已修改其中的一些或所有属性值。
为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。...通过采用《编程篇》中的“找对象”的例子,如果对年龄具有这样的要求:年龄要么在18到25周岁之间,要么在40岁到50周岁之间,对于这段不算太复杂的验证规则,我们需要在Age属性上添加如下7个特性。...Validate,我们通过如下的代码对具有不同Age属性值的Mate对象实施验证。...只要是提供了一个表示验证表达式的ValidationExpression的属性,该属性在构造函数中指定。...验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证[设计篇] 采用一个自创的"验证框架"实现对数据实体的验证[改进篇] 采用一个自创的"验证框架"实现对数据实体的验证
属性赋值(当前赋值也不会出错),也不需要显式地把新创建的Comment类型的对象添加到DbContext中。...导航属性 由一个属性可以访问到另外一种类型的实体叫做导航属性 单向导航:不设置反向的属性,然后配置的时候WithMany()不设置参数即可。...执行SaveChanges()等方法时,EF Core将会把存储的快照中的值与实体的当前值进行比较。...Tips:如果查询出来的对象不会被修改、删除等,那么查询时可以AsNoTracking(),就能降低内存占用。 实体状态跟踪的妙用 常规更新需要先查询、再更新,两条SQL。...; Tips:一般只有在编写不特定于某个实体类的通用框架的时候,由于无法在编译器确定要操作的类名、属性等,所以才需要编写动态构建表达式树的代码。
即使在编译时使用IRepository接口来“解耦”类,也无法消除与外部依赖的关系。 在判断什么是数据模型时,要小心那些“存活实体”。...如果只是进行一般的显示,只要在发生EventHandler ErrorsChanged事件时更新HasErrors属性即可。...所幸的是,我们可以在不破坏兼容性的情况下重新定义它。 HasErrors属性可以在其他属性发生变化时进行同步更新。...我们可以借此做一些有趣的事情,比如在后台进程中更新模型或者在多个视图之间共享模型。 实现属性变更通知最简单的办法是每次在调用属性设置器时触发它们。虽然从技术方面看是可行的,但仍有一些性能方面的影响。...在设计WPF时,它假设我们总是会使用ObservableCollection,因此WPF不支持NotifyCollectionChangedEventArgs.NewItems具有多个项目的情况。
,ORM会自动生成SQL语句并执行,但普通的ORM框架却不能灵活的生成需要的SQL语句,我们需要一种具有SQL灵活性的的但却能够面向对象的ORM查询语言(ORM Query Language)--OQL...,OQL是可以进行其它平台移植的 .NET框架低版本支持:框架仅需.NET 2.0 支持,如果引入Linq方式,那么意味着框架需要.net 3.5及以上版本支持 简化条件调用:在Where方法中直接调用实体类的属性...q=new OQL(emp); q.Select(); 选取多个实体属性(多表字段): 上面的例子是选取单个实体(表)的方式,选取多个实体类的属性是类似的,Select方法的参数使用不同的实体类的属性即可...2.1,更新数据 /// /// 更新实体类的某些属性值,如果未指定条件,则使用主键值为条件。...,也可以是实体类属性对应的字段名。
仓储定义应用服务执行业务用例时需要的所有的数据访问方法。而仓储的实现通常位于基础架构层,由持久化框架来支撑。...然而当对复杂的领域模型进行建模时,仓储是模型的扩展,它表明聚合检索的意图,可以对领域模型进行有意义的读写,而不是一个技术框架。 也有很多人认为仓储是一种反模式,因为其隐藏了基础持久化框架的功能。...此外,可以使用多种形式的持久化存储,例如文件、web服务器、关系数据库或NoSQL。领域模型是对问题域的抽象,具有丰富的语言和行为,由实体和值对象组成。...比如,在实体中我们一般使用IsActive或IsDeleted属性来表示软删除,而一旦实体中的某条数据被删除,那么UI中基本不会再显示这条数据,那对于实体的查询都需要包含类似Where(c=> c.IsActive...它明确表明聚合所必需的数据操作。 ORM框架不是仓储。仓储是一种架构模式。ORM用来以面向对象的方式来表示数据模型。仓储使用ORM来协调领域模型和数据模型。 仓储适用于具有丰富领域模型的限界上下文。
,并使用某种查询翻译器将对象查询(Query)翻译成底层数据库持久化框架可以理解的查询(即翻译成一条Sql 语句)。...表示构成查询的过滤器部分:指定一个实体属性(OR Mapping)、要比较的值以及比较方式: public class Criterion { private string..._propertyName;//实体属性 private object _value;//进行比较的值 private CriteriaOperator _criteriaOperator...而不是使用魔幻字符串: query.Add(new Criterion("CustomerId", customerId, CriteriaOperator.Equal)); 下面要创建表示查询的排序属性...= 0,//动态创建 RetrieveOrdersUsingAComplexQuery = 1//使用已经创建好了的存储过程、视图、特别是查询比较复杂时使用存储过程 } 最后,
类 BaseEntity类中定义了所有参加数据操作实体的公共属性,因此我们把该类定义为抽象类,作为派生类的的基类。...int Insert(TEntity entity); //增加多个实体 int Insert(IEnumerable entities...); //更新实体 int Update(TEntity entity); //删除 int Delete(object id);...具有一定的灵活性 我们发现接口的泛型TEntity有一个约束需要继承BaseEntity,BaseEntity就是把实体中公共的属性抽取出来,比如:Id(主键),CreateDate(创建时间)等。...4.Repository模式中基于接口的抽象类EFRepositoryBase 我们用一个抽象类EFRepositoryBase来实现接口中的方法,这样派生的类都具有接口中定义的方法,也防止EFRepositoryBase
Dapper 快速、可靠且经过充分测试,多年来一直被一些世界上最大的公司用于生产。 它非常易于使用,并具有许多功能,使其成为数据访问的强大工具。...Dapper 比实体框架更快,用于 CRUD 操作(查询和保存),因为它很简单。...使用实体框架,开发人员在处理数据时可以在更高的抽象级别上工作,并且与传统应用程序相比,可以使用更少的代码创建和维护面向数据的应用程序。...">实体必须带主键 /// 指定更新的字段x=new {x.a,x.b} /// 实体必须带主键 /// 指定更新的字段x=new {x.a,x.b} /// <param name
文章目录 前言 一、Dapper-Extensions的使用 1.安装包 2.使用方法 2.1 插入数据 2.2 获取单个实体 2.3 删除记录 2.4 更新记录 2.5 获取记录列表 2.6 根据自动排序...、获取指定的记录 2.7 获取过滤条件的记录总数 ---- 前言 Dapper是.NET中比较出名的ORM框架之一,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的...对于更高级的查询方案,Dapper 扩展提供了一个谓词系统。此库的目标是通过不需要任何属性或基类继承来保持 POCO 的纯正性。...自动映射用于获取、插入、更新和删除操作的 POCO。 获取列表,计数方法适用于更高级的方案。 用于返回分页结果集的 GetPage。 自动支持 Guid 和整数主键(包括对其他键类型的手动支持)。...通过使用ClassMapper(无属性!)的纯POCO。 通过使用类映射器自定义实体表映射。 复合主键支持。 单数和复数表名支持(默认为单数)。 易于使用的谓词系统,适用于更高级的方案。
这种写法是C#的一种语法糖,只有get表示该属性是一个只能读的属性(与只读属性有个微妙的差距),等号后面表示该属性第一次赋值的内容。...1.3 简单更新 FreeSql的更新与其他框架相比略显复杂,这里先展示一种更新方式: list[0].Name = "修改测试"; row = FreeSqlContext.FreeSqlConnect.Update...需要注意的是,如果使用exp 做批量删除的话,只能用实体类的属性作为条件,不能使用导航属性。 使用sql语句的话,可以使用参数化写法如下:Where("id = ?...简单理解一下,在这里FreeSql只是解析了数据里的实体,但并没有从传入的实体解析出更新SQL语句。...说到这里了,FreeSql在更新上,需要额外指定更新的数据来源: IUpdate SetSource(T1 source); IUpdate SetSource(IEnumerable<
接下来,我们主要来谈谈DataBinder的设计,看看它是如何做到将作为数据源实体的属性值绑定到界面对应的控件上的。...最新版本的主要解决两个主要问题:通过Expression Tree的方式进行属性操作(属性赋值和取值),添加了“数据捕捉”(Data Capture)的功能,以实现将控件中的值赋给指定的实体。...控件(这里指TextBox、Label等这样绑定标量数值的控件)绑定值来源于数据源实体的某个属性。但是一个类型的属性可能有很多,我们需要某种筛选机制将我们需要的“数据属性”提取出来。...默认值为True,如果改成False,基于该条映射的绑定将被忽略; AutomaticUpdate:是否需要进行自动更新到数据实体中,通过它阻止不必要的自动数据捕捉行为。...controlValueProperty, property)).ToArray(); 10: } 四、通过映射集合实现数据绑定 通过《上篇》我们知道,DataBinder提供两种数据绑定方式:一种是直接通过传入数据实体对象和容器控件对具有匹配关系的所有子控件进行绑定
时才实际去执行查询,获取单个资源的方法的重构思路类似 创建资源方法重构 [HttpPost] public async Task CreateAuthorAsync(AuthorForCreationDto...nameof(GetAuthorsAsync), new { authorId = authorCreated.Id }, authorCreated); } 当数据发生变化时,EF Core 会将实体对象的属性及其状态修改...sourceType, Type destinationType); 它能将源映射到一个已经存在的对象,重载是为了将 BookForUpdateDto 映射到已经从数据库中获取到的 Book 实体 [...return NoContent(); } 部分更新的实现逻辑与此类似,不同的是获取需要部分更新的 Book 实体后,首先将它映射为 BookForUpdateDto 类型的对象,其次使用 JsonPatchDocument...的 ApplyTo 方法将更新信息应用到映射后的 BookForUpdateDto 对象,接着再将它映射到 Book 实体得到更新后的值 [HttpPatch("{bookId}")] public
并成功使用PostRepository来查询到了数据,今天我们来创建一个新的服务层以及安装配置依赖注入框架组件Autofac等。... Post FindById(int id); /// /// 查询所有数据(无分页,大数量时请慎用.../// int Insert(Post entity); /// /// 更新实体数据.../// int Insert(Post entity); /// /// 更新实体数据...> /// 更新实体数据 /// /// 博文实体类 //
如下代码 我们发现接口的泛型TEntity有一个约束需要继承BaseEntity,BaseEntity就是把实体中公共的属性抽取出来,比如:Id(主键),CreateDate(创建时间)等。...int Insert(TEntity entity); //增加多个实体 int Insert(IEnumerable entities...); //更新实体 int Update(TEntity entity); //删除 int Delete(object id);...//根据逐渐获取实体 TEntity GetByKey(object key); } } 2、BaseEntity类 BaseEntity类中定义了所有参加数据操作实体的公共属性...,下面我们定义一个抽象类EFRepositoryBase来实现该接口方法 我们用一个抽象类EFRepositoryBase来实现接口中的方法,这样派生的类都具有接口中定义的方法,也防止EFRepositoryBase
领取专属 10元无门槛券
手把手带您无忧上云