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

浅入 ABP 系列(7):对象映射

本篇主要讲解 ABP 中如何配置、使用对象映射,其中大部分跟 AutoMapper 这个框架有关,建议读者预先学习这个框架,可参考笔者的另一篇博客:浅入 AutoMapper 基础 DTO和实体 实体...,当一个实体有数十个字段时,写出的代码会很冗长,而且容易忽略了某些字段,最终导致了 Bug。...Debug 阶段,我们担心项目改动代码时,新增的字段忘记了加入到映射配置中,或者其它情况,在 AutoMapper 中,我们可以使用 configuration.AssertConfigurationIsValid...ObjectExtensionManager 有两种属性,其说明如下: AddOrUpdate :是定义对象额外属性或更新对象额外属性的主要方法; AddOrUpdateProperty:快捷地定义单个拓展属性的方法...typeof(TestA), typeof(TestB) }); 另外它还可以设置默认值

2.2K10

线程安全的字典ConcurrentDictionary

第 1 个参数是键,第 2 个参数是委托,通过委托将键(本例中为 0)转换为待添加至字典的值(本例中为“Zero”)。只有当字典中不存在该键时,才会调用该委托。...第 3 个参数是另一个委托,它把键(0)和旧值转换为已更新的、待存入字典的值(“Zero”)。同样,只有当字典中不存在该键时,才会调用该委托。...AddOrUpdate 会为该键返回新值,这个新值与任意委托返回的值一样。 接下来才是真正复杂的部分:为了能让并发字典稳妥地工作,AddOrUpdate 可能需要多次调用任意委托,或同时调用两个委托。...,不能通过它基于现有值来更新一个值。...特别注意,并发字典有多个线程在读取、更新、添加和移除值,而且在许多情况下,在尝试读取某个键之前,根本无法知晓这个键是否存在。

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

    MySQL从删库到跑路_高级(一)——数据完整性

    二、实体完整性实现 1、实体完整性的实现简介 实体完整性的实现有两种方式: A、主键约束:一张表只能有一列设置主键,值必须唯一,不允许为空,innoDB存储引擎,主键就是索引。...在表中插入一条新的记录时,如果没有为该字段赋值,那么数据库系统会自动为该字段赋一条默认值。...如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。...TABLEscoreADD CONSTRAINTscore_fk2FOREIGN KEY (sid) REFERENCESstudent(sid); 5、验证级联动作删除和更新 在score表创建的参照完整性...,删除动作和更新动作的参照动作选择了cascade(级联操作),当学生表的sid更新时,分数表score的相应的sid也会更新,当学生被删除,分数表对应的sid的记录也会自动删除。

    2.3K20

    一篇文章带你彻底了解MySQL各种约束

    : 零填充约束 数据库中有三个完整性: 域、实体、参照完整性 域(列)完整性: 域完整性是对数据表中字段属性的约束 实体完整性在MySQL中实现: 通过主键约束和候选键约束实现的 参照完整性: 也就是说是...MySQL的外键 1. default 概念 - 指定某列的默认值,插入数据时候,此列没有值,则用default指定的值来填充 添加 - 在创建表的时候添加: create .... default...table emp drop foreign key fk_name; 注意: - 在创建表时,不去明确指定外键约束的名称,系统会自动地生成一个外键的名称。...- 使用 show create table 表名 查看具体的外键名称 设置外键中的级联关系 - on delete cascade: 删除主表中的数据时,从表中的数据随之删除 - on update...cascase: 更新主表中的数据时,从表中的数据随之更新 - on delete set null: 删除主表中的数据时,从表中的数据置空 级联删除 - create table emp(

    1.1K127

    Spring解决泛型擦除的思路不错,现在它是我的了。

    但是,你仔细想,“发给指定服务同步一下”这样的动作按理来说,不应该和用户新增和更新的行为“耦合”在一起,他们应该是两个独立的逻辑。...然后用 data 对应的真正的 T 对象实例的类型,作为返回值,这样泛型对应的真正的对象类型,就在运行期被动态的获取到了,从而解决了编译阶段泛型擦除的问题。...因为这个缓存里面放的就是在项目启动过程中已经触发过的框架自带的 listener 对象: 调用的时候,如果能从缓存中拿到对应的 listener,则直接返回。...数据变化之后同步清除缓存,这是一种简单可靠的缓存更新方式。只有在清除失败,或者数据库主从同步间隙被脏读才有可能出现缓存脏数据,概率比较小,一般业务上也是可以接受的。...和 Max 同学先去了她的大学,在柳浪弯小吃街回忆了一下读书时心心念念的味道,中午吃了小煎鸡拌面,一如当年我从郫县风尘仆仆赶来,吃上这一口,还是熟悉的味道。

    30910

    Python之pygame学习精灵碰撞做一个躲避球游戏(13)

    它应该将两个精灵作为值并返回一个bool值,指示它们是否发生碰撞。如果未传递碰撞, 则所有精灵必须具有“rect”值,该值是精灵区域的矩形,将用于计算碰撞。 这句话很重要!...无冲突时返回无。 如果您不需要该功能的所有pygame.sprite.spritecollide()功能,此功能将更快一些。 碰撞参数是一个回调函数,用于计算两个精灵是否发生碰撞。...它应该将两个精灵作为值并返回一个bool值,指示它们是否发生碰撞。如果未传递碰撞,则所有精灵必须具有“rect”值,该值是精灵区域的矩形,将用于计算碰撞。 同样注意需要有rect属性!!...获取鼠标返回的坐标,用这个坐标来画圆的时候,设置好不能超出边框,结果圆居然能出去???? 然后我画一个辅助矩形,看看圆的圆心是否与矩形的中心对齐。。结果不是的,圆的中心在矩形的左上角!...,self.fk.y,self.fk.w, self.fk.h]) # screen.blit('',(self.fk.x, self.fk.y)) # 矩形边框,用于查看球是不是在矩形内部

    3.6K30

    ASP.NET MVC学习笔记07数据表和模型添加新字段

    这非 常方便的在开发时就可以发现错误,否则您可能会在运行时才发现这个问题。 (由一个晦涩的错误信息,才发现这个问题。)...在程序包管理器控制台窗口,在提示符 PM> 后输入: Enable-Migrations -ContextTypeName StudyMVC.Models.MovieDBContext 注意:如果你设置了其他项目名称...Code First Migrations调用Seed的方法,每个迁移(程序包管理器控制台 更新数据库 ),此方法用于updates数据(如果数据存在),或inserted数据。...在AddOrUpdate方法在下面的代码执行一个的“upsert”操作: context.Movies.AddOrUpdate(i => i.Title, new Movie {...你可能不希望这样的事情发生:在某些情况下,当您更改数据测试时,你希望你的变化后数据 库同步更新。在这种情况下,你想要做一个有条件的插入操作:只有当它不存在的时候,插入一行。

    1.4K30

    一些SQL的基本概念和用法

    即实体中的某个属性有多个值时,必须拆分为不同的属性。关系数据库中,第一范式 (1NF)是对关系模式的设计基本要求。...选取一个能区分每个实体的属 性或属性组,作为实体的唯一标识,在找不到候选时,可额外增加属性以实现区分。 2NF 要求实体的属性完全依赖于主键属性。...同时更新索引是要付出额外代价的,索引并非越多越好。 (4)复杂的or条件可以通过多条select语句用union合并来实现,这样会较大提升性能。...rollback(回滚):值撤销指定的SQL语句的执行。                commit(提交):将未存储的SQL语句写入数据库。                ...如果希望MySQL不自动提交更改,需要设置autocommit标记值。

    56940

    Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据

    这在开发周期的早期阶段通常很有用(比如设计领域实体时),从单元测试的角度也很有用。...DropCreateDatabaseIfModelChanges:这个策略的意思就是说,如果领域模型发生了变化(具体而言,从领域实体提取出来的模式信息和实际的数据库模式信息失配时),就会销毁以前的数据库...MigrateDatabaseToLatestVersion:如果使用了该初始化器,那么无论什么时候更新实体模型,EF都会自动地更新数据库模式。...这里很重要的一点是:这种策略更新数据库模式不会丢失数据,或者是在已有的数据库中更新已存在的数据库对象。MigrateDatabaseToLatestVersion初始化器只有从EF4.3才可用。...Students { get; set; } 22 } 23 } 这样一来,无论什么时候创建上下文类,Database.SetInitializer()方法都会被调用,并且将数据库初始化策略设置为

    1.6K20

    FreeSql v0.11 几个实用功能说明

    友情提醒:在 dto 可以直接映射一个导航属性 ---- 二、IncludeMany 联级加载 之前已经实现,有设置关系,和未设置关系 的导航集合属性联级加载。...这个月发现还有一余孽未清,发现问题后及时解决了,并增加单元测试代码以绝后患。 ?...(注意不会更新) 属性集合为空时,删除他们的所有关联数据(中间表) 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 ---- 五、迁移实体 - 到指定表名 fsql.CodeFirst.SyncStructure...var repo = fsql.GetRepository(); repo.InsertOrUpdate(实体); 如果内部的状态管理存在数据,则更新。...update 中将以 VALUES(`字段`) 的形式设置; 当 insert 部分中不存在的列,在 update 中将为常量形式设置,当操作实体数组的时候,此常量为 case when ... end

    2K10

    ConcurrentDictionary字典操作竟然不全是线程安全的?

    • valueFactory工厂函数可能会多次执行 • 虽然会多次执行, 但插入的值固定是一个,插入的值取决于哪个线程率先插入字典。 Q3: 怎么做到的随机稳定输出一列值?...A:源代码做了double check[2]了,后续线程通过工厂类创建值后,会再次检查字典,发现已有值,会丢弃自己创建的值。...check发现字典key已经有Lazy容器了,会放弃插入); ③ 线程执行Lazy.Value, 这时才会执行创建value的工厂函数; ④ 多个线程尝试执行Lazy.Value, 但这个延迟初始化方式被默认设置为...IHttpClientFactory在构建字典时, 也用到了这个技巧,大家自行欣赏DefaultHttpCLientFactory源码[4]。...本人会不时修正理解、更正错误,请适时移步左下角永久更新地址;也请看客大胆斧正。

    73940

    mysql使用基础 sql语句与数据完整性(二)

    : mysql>SHOW VARIABLES LIKE 'character%'; 通知服务器客户端使用的编码字符集: mysql>SET character_set_client=gbk; 显示时乱码...Tom的员工薪水修改为4000,job改为CMO: mysql>UPDATE user SET salary=4000,job='CMO' WHERE username='Tom'; 将Jack的薪水在原有基础上增加...①实体完整性: 规定表中的一行在表中是唯一的实体,一般是通过定义主键的形式来实现的。实体完整性要求每一个表中的主键字段都不能为空或者重复的值。实体完整性指表中行的完整性。...它保证表中某些列不能输入无效的值。...与具体业务有关 ③参照完整性(多表设计) 当更新、删除、插入一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确,简单的说就是表间主键外键的关系。

    1.3K100
    领券