直接上代码

    [Table("single_table")]
public class SingleTable
{
[Key]
public Int32 id { get; set; }
//refer http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations(v=vs.110).aspx
[Required]
[Url]
[EmailAddress]
[RegularExpression("pattern")]
[MaxLength(, ErrorMessage = "cant more than 1")]
[MinLength()]
[Range(, )]
[FileExtensions]
[DataType(DataType.CreditCard)] //还不熟
[myValidation(ErrorMessage = "xx")] //ErrorMessage是attribute对象公开属性
public string data { get; set; }
}

这些都是default微软提供的基本验证

在 SaveChanges()的时候会触发

也可以在通过entry验证

bool ok = db.Entry(data).GetValidationResult().IsValid;

string errorMsg = db.Entry(data).GetValidationResult().ValidationErrors.First().ErrorMessage;

ValidationErrors 是个集合,可能有多个错误。

上面有一个 myValidation 是我们自定义的,来看代码吧

    public class myValidation : ValidationAttribute
{
public myValidation()
{
//init
}
//Override ValidationResult
//object value 是当前的值,可以判断类型来进行不同验证.
//ValidationContext 里面可以获取当前被验证的entity对象,通过反射应该要拿什么都可以了吧.
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
this.ErrorMessage = ""; //这里可以动态拼写errorMsg
//成功
return ValidationResult.Success;
//失败就返回error msg
return new ValidationResult(this.ErrorMessageString);
}
}

看完注释就应该明白了吧.

还有就是如何捕获异常

    catch (DbEntityValidationException ex) //用这个class
{
//因为 SaveChanges 会同时验证多个实体
//所以这里可能会有很多哦
foreach (var eve in ex.EntityValidationErrors)
{
//eve可以用entry获取实体
string className = eve.Entry.Entity.GetType().Name; //eve内有实体
string state = eve.Entry.State.ToString(); //state added,modified 等 foreach (var ve in eve.ValidationErrors)
{
//每个属性和errorMsg
string attr = ve.PropertyName;
string errorMsg = ve.ErrorMessage;
}
}
throw null;
}

Entity Framework with MySQL 学习笔记一(验证标签)的更多相关文章

  1. Entity Framework with MySQL 学习笔记一(安装)

    声明 :  数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, ...

  2. Entity Framework with MySQL 学习笔记一(乐观并发)

    在做项目时,通常我们对乐观并发有几种处理模式 1. 告诉用户此数据已被其他人捷足先登,更改了.你就算新一下重来吧. 2.直接把数据覆盖上去,我最大. 3.用被人的数据. 这里给出 code first ...

  3. Entity Framework with MySQL 学习笔记一(继承)

    基本上sql中要表示继承关系有3中方式. 分别是,1表继承(TPH),2表继承(TPC),3表继承(TPT) 1表 : Person id type name classroom office 1 s ...

  4. Entity Framework with MySQL 学习笔记一(关系整理版)

    1-1 设置 //DataAnnotation 1-1 | 1-0 table //SQLtable : member , columns : memberId, name //SQL basic l ...

  5. Entity Framework with MySQL 学习笔记一(查看EF和SQL请求日志)

    做数据库的一向来都会很注意请求的次数还有语句.这关系到很多性能的问题. 因此在使用EF的时候如果不了解原理很可能会搞出很糟糕的请求. 所以呢,在还没有搞懂EF前最基本的是你得"看得见&quo ...

  6. Entity Framework with MySQL 学习笔记一(拦截)

    参考 : http://msdn.microsoft.com/en-us/data/dn469464.aspx EF 允许我们在发送SQL请求和返回数据时做一些拦截的动作 比如可以自定义写 log , ...

  7. Entity Framework with MySQL 学习笔记一(复杂类型 Complex Types)

    有时候我们希望在sql一个表里面的column, 一部分被分化成另一个class 典型的例子是 Address 直接看代码: [Table("member")] public cl ...

  8. Entity Framework with MySQL 学习笔记一(insert,update,delete)

    先说说 insert 吧. 当EF执行insert时,如果我们传入的对象是有关联(1对多等)的话,它会执行多个语句 insert到多个表, 并且再select出来填充我们的属性(因为有些column默 ...

  9. Entity Framework with MySQL 学习笔记一(关系)

    这一篇说说 EF Fluent API 和 DataAnnotations 参考 : http://msdn.microsoft.com/en-us/data/jj591617.aspx http:/ ...

随机推荐

  1. html+javascript实现可拖动弹出层、对话框、可提交

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org ...

  2. seq2sparse(4)之PartialVectorMergeReducer源码分析

    继前篇blogseq2sparse(3)之TFParitialVectorReducer源码分析 之后,继续分析下面的代码,本次分析的是PartialVectorMergeReducer的源码,这个r ...

  3. VS中批量删除cs代码中的#region和#endregion

    Visual Studio中如何批量删除cs代码中的#region和#endregion,不删除它们中间的代码,只删除这两个标记及标记的注解的方法.Vs中提供了很强大的文本查找与替换功能,简单的替换只 ...

  4. Android(java)学习笔记249:ContentProvider使用之获得系统联系人信息01

    1.系统联系人的数据库(3张最重要的表) (1)raw_contacts  联系人表        保存联系人的id   contact_id (2)data 数据表       保存联系人的数据 ( ...

  5. ls Common Command-Line Options

    ls  Common Command-Line Options Command  Use: ls -l    Shows a long listing, which includes informat ...

  6. TCP Linger的坑

    昨天和同事奋战几个小时,解决了一个linger造成的bug. 现象是这样的,这是一个我从原型接手,扩充了各种功能成为可用代码的epoll实现的非阻塞socket server程序,接收大量的短连接,测 ...

  7. js数组的操作及数组与字符串的相互转化

    数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...

  8. Remoting 的“传递的引用”理解

    WCf是集大成者,具有其他微软的很多技术,其中分布式上很多借助于Remoting,所以研究一下Remoting有助于理解WCF 提到Remoting就不得不涉及到MarshalByRefObject这 ...

  9. linux的comm命令

    http://blog.csdn.net/apache6/article/details/5789669

  10. 仿写Windows7桌面和任务栏 HTML5+CSS3+Jquery实现

    过去一段时间零零散散的自学了一点点jquery的相关用法,基本上属于用到哪个了,就去查然后就学一点,没有系统的学过,深入的用法也不是特别了解,毕竟javascript基础就比较薄弱.经过一段时间的零敲 ...