zoukankan      html  css  js  c++  java
  • 关于Entity Framework 4.0/4.1数据验证的一点体会

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

    比如说,有如下类定义:

     public class User

    {
        
    public int UserId { getset; }
        
    public string LogOnName { getset; }
        
    public System.DateTime LastLogOnTime { getset; }

    相应的验证定义:

    [MetadataType(typeof(UserMetaData))]
    public partial class User
    {
    }

    public class UserMetaData
    {
        [Display(Name 
    = "User Id")]
        
    public object UserId { getset; }

        [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 { getset; }

        [Display(Name 
    = "Last Log On Time")]
        
    public object LastLogOnTime { getset; }

    }

    如果上述定义中的 [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在修改数据时会检查实体所有的属性是否符合验证规则,不管属性是否会在本次修改数据操作中更新,目前还没找到解决办法。 

  • 相关阅读:
    面向对象继承
    webpack 错误提示 Error: Can't resolve 'css-loader'或Error: Can't resolve 'style-loader'
    Math.min() Math.max()
    表单
    addEventListener()
    H5图片背景
    ruby获取最新ruby
    js对象拷贝
    Oh-My-Zsh 下远程ssh的乱码问题
    MSSQL、MySQL 数据库删除大批量千万级百万级数据的优化
  • 原文地址:https://www.cnblogs.com/jlzhou/p/2050867.html
Copyright © 2011-2022 走看看