当我更新记录时,我想忽略保存CreatedBy
和CreatedDate
字段。
我尝试在存储库中将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时,有没有办法忽略这些属性?
答案 0 :(得分:0)
我对其他解决方案持开放态度,但我修复此问题的方法是禁用ValidateOnSaveEnabled
文件中的SqlContext
。根据我的阅读,EF验证所有添加和修改的实体。由于我已经验证了我的ViewModel,我刚刚禁用了此功能。
答案 1 :(得分:0)
由于你想在进行更新时忽略这些属性,但是你需要它们用于新的进入,我会在基础中将这些属性设置为虚拟。创建2个继承基类的类:一个用于更新,一个用于新条目。新条目的类应使用Required属性修饰属性。另一类更新,不应该。