09 2013 档案
摘要:上篇文章介绍了ValidationAttribute和IValidatableObject.Validate验证,但是这种验证还是稍微简单了,对于复杂的实体,例如:继承过来的实体、实现某接口的实体等等,简单的验证就无能为力了。这里重写ValidateEntity方法可以实现更为复杂的验证。ValidateEntity本身是虚方法(virtual),故可以重写此方法加上自己的验证逻辑。在引入:System.Data.Entity.Infrastructure、System.Data.Entity.Validation、System.Collections.Generic三个命名空间的前提下,直接
阅读全文
摘要:之前的Code First系列文章已经演示了如何使用Fluent API和Data Annotation的方式配置实体的属性,比如配置Destination类的Name属性长度不大于50等。本文介绍EF里更强大的Validation API达到实体属性验证的效果。主要是通过ValidationAttributes属性和IValidatebleObject接口来进行的验证。一、实体属性的简单验证(GetValidationResult方法)修改person类LastName属性不超过10个字符: [MaxLength(10)] public string LastNa...
阅读全文
摘要:本文目录查看实体当前、原始和数据库值:DbEntityEntry查看实体的某个属性值:GetValue方法拷贝DbPropertyValues到实体:ToObject方法修改DbPropertyValues当前值:索引器克隆实体:Clone方法设置实体的值:SetValues方法克隆实体:SetValues获取和设置实体的单个属性:Property方法查询实体的属性是否被修改:IsModified方法修改导航属性重新加载实体:Reload方法读取相关联的实体和状态:DbContext.ChangeTracker.Entries方法EF里如何解决更新时的冲突重写上下文的SaveChanges方法
阅读全文
摘要:本文目录使用EntityState枚举实现单个实体的增/删/改增加:DbSet.Add = > EntityState.Added标记实体为未改变:EntityState.Unchanged修改:EntityState.Modified删除:DbSet.Remove = > EntityState.DeletedEF里实体状态的递归(recursive)不被上下文追踪的情况下实现增删改操作让实体实现自定义的IObjectWithState接口来设置实体状态通用的转换实体状态方法本文源码和系列文章目录之前使用EF都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据
阅读全文