您的位置:首页 > 其它

关于Entity Framework 4.0/4.1数据验证的一点体会

2011-05-19 11:20 197 查看
最近用Entity Framework 4.1做一个MVC3的网站应用的数据层,遇到一个问题,在修改或添加实体属性的验证后,对数据库中已经存在的数据编辑会有影响,即使当前的编辑操作没有涉及到修改验证规则的项,在SaveChanges()也会抛出异常。

比如说,有如下类定义:

public class User

{

public int UserId { get; set; }

public string LogOnName { get; set; }

public System.DateTime LastLogOnTime { get; set; }

}

相应的验证定义:

[MetadataType(typeof(UserMetaData))]

public partial class User

{

}

public class UserMetaData

{

[Display(Name = "User Id")]

public object UserId { get; set; }

[StringLength(50)]

[Display(Name = "Log On Name")]

[RegularExpressionAttribute("^[a-zA-Z][a-zA-Z0-9_]{4,}$", ErrorMessage = "Please enter a valid Log On Name.")]

[DisplayFormat(ConvertEmptyStringToNull = false)]

public object LogOnName { get; set; }

[Display(Name = "Last Log On Time")]

public object LastLogOnTime { get; set; }

}

如果上述定义中的 [RegularExpressionAttribute("^[a-zA-Z][a-zA-Z0-9_]{4,}$", ErrorMessage = "Please enter a valid Log On Name.")]是在数据库中已经存在数据记录后添加,则可能会引发保存数据时的验证异常,即使没有编辑LogOnName列。

假设数据库Users表中有一行记录的LogOnName的值是123456,则下面的代码就会抛出异常:

{

...

var User = db.Users.Find(id)

User.LastLogOnTime=DateTime.Now();

db.SaveChanges(); // will raise validation exception here!

...

}

由此推断,Entity Framework在修改数据时会检查实体所有的属性是否符合验证规则,不管属性是否会在本次修改数据操作中更新,目前还没找到解决办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: