直接上代码

    [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. dojox.grid.EnhancedGrid 和 dojox.grid.DataGrid 的继承关系

    dojox.grid.EnhancedGrid  的介绍说, EnhancedGrid 是基于 DataGrid 提供增强功能的. EnhancedGrid (dojox.grid.EnhancedG ...

  2. G - Balanced Lineup - poj3264(区间查询)

    题意:给你一组值,然后询问某个区间的最大值和最小值得差 分析:因为没有更新,所以只需要查找即可,节点保存一个最大值最小值就行了 ************************************ ...

  3. java中输入方式Scanner和BufferedReader

    Scanner 在java.util包中,需要引入时可以用import java.util.*;或者import java.util.Scanner; 工作原理:通过new创建一个Scanner对象, ...

  4. web service1简单的例子用jdk自带的类

    1,建立自己的java项目my_service 2,建立包,com.hjg.service 3,创建类: IMyService.java package com.hjg.service; import ...

  5. Reachability下载地址

    https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

  6. Apache Shiro 使用手冊 链接文件夹整理

    1.Apache Shiro 使用手冊(一)Shiro架构介绍 2.Apache Shiro 使用手冊(二)Shiro 认证 3.Apache Shiro 使用手冊(三)Shiro 授权 4.Apac ...

  7. js上拉加载、下拉刷新的插件

    之前在网上找那种下拉刷新,上拉加载的插件,有一款IScroll,但是用起来太麻烦,于是就自己写了款,但依赖于jquery.js,bug肯定有,希望评论提出. js: /* 简洁的下拉刷新,上拉加载插件 ...

  8. machine learning in action , part 1

    We should think in below four questions: the decription of machine learning key tasks in machine lea ...

  9. LA 6448 Credit Card Payment

      [题目] 你的信用卡目前欠M元,每月的汇率是R,每月的利息要四舍五入为小数点后两位,你每月还B元,问多少月能还清. 输入 先是T代表测试数据组数 接下来T行,每行有三个实数,R,M,B每个实数小数 ...

  10. SQL存储过程+游标 循环批量()操作数据

    本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.M ...