在调用savechanges()之前忽略属性

时间:2016-11-04 16:25:44

标签: entity-framework asp.net-mvc-5

当我更新记录时,我想忽略保存CreatedByCreatedDate字段。

我尝试在存储库中将IsModfied设置为false,但在我调用SaveChanges()之后,它会抛出一个异常,说明CreatedBy字段是必填字段。< / p>

public void Save(Company company)
    {
        if (company.CompanyId > 0)
        {
            _context.Entry(company).State = EntityState.Modified;
            _context.Entry(company).Property(c => c.CreatedBy).IsModified = false;
            _context.Entry(company).Property(c => c.CreatedDate).IsModified = false;
        }
        else
            _context.Companies.Add(company);

        _context.SaveChanges();
    }

这些字段位于BaseModel

public class BaseModel
{
    [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ValidationStringResource))]
    [MaxLength(100, ErrorMessageResourceName = "MaximumLength", ErrorMessageResourceType = typeof(ValidationStringResource))]
    public string CreatedBy { get; set; }

    [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ValidationStringResource))]
    public DateTime CreatedDate { get; set; }

    [MaxLength(100, ErrorMessageResourceName = "MaximumLength", ErrorMessageResourceType = typeof(ValidationStringResource))]
    public string LastUpdatedBy { get; set; }

    public DateTime? LastUpdatedDate { get; set; }
}

当我在没有隐藏输入的情况下调用update或者必须从数据库中获取原始公司并将其映射到viewmodel时,有没有办法忽略这些属性?

2 个答案:

答案 0 :(得分:0)

我对其他解决方案持开放态度,但我修复此问题的方法是禁用ValidateOnSaveEnabled文件中的SqlContext。根据我的阅读,EF验证所有添加和修改的实体。由于我已经验证了我的ViewModel,我刚刚禁用了此功能。

答案 1 :(得分:0)

由于你想在进行更新时忽略这些属性,但是你需要它们用于新的进入,我会在基础中将这些属性设置为虚拟。创建2个继承基类的类:一个用于更新,一个用于新条目。新条目的类应使用Required属性修饰属性。另一类更新,不应该。