【发布时间】:2018-09-29 21:45:25
【问题描述】:
我正在使用 AspNet Core 在 MVC 模板中构建一个项目。
我使用了实体框架,并且搭建了一个现有数据库。现在,我想为某个类添加一些数据注释,但我不想编辑由脚手架自动生成的类,所以我尝试使用元数据和覆盖现有方法 saveChanges。
Scaffolding 自动生成的Users.cs
public partial class Users
{
public int UserId { get; set; }
...
// If I have [MaxLength(5, ErrorMessage = "Too short")] here, it works
public string Email { get; set; }
}
UsersMetadata.cs(也尝试过 Users.Metadata.cs,否则没有任何改变)
[ModelMetadataType(typeof(UsersModelMetaData))]
public partial class Users { }
public class UsersModelMetaData
{
[MaxLength(5, ErrorMessage = "Too short")]
public string Email { get; set; }
}
MyContext : DbContext 类
public override int SaveChanges()
{
var entities = from e in ChangeTracker.Entries()
where e.State == EntityState.Added
|| e.State == EntityState.Modified
select e.Entity;
foreach (var entity in entities)
{
var validationContext = new ValidationContext(entity);
Validator.ValidateObject(entity, validationContext, validateAllProperties: true);
}
return base.SaveChanges();
}
所以,即使这似乎是正确的解决方案(我已经搜索了一上午),它也不起作用:问题似乎是 UsersModelMetaData 中的数据注释未被读取,因为如果我将Data Annotation直接放到Users.cs文件中,方法saveChanges()会抛出异常。
我确实找到了这个解决方案 -> https://stackoverflow.com/a/30127682/6070423 AssociatedMetadataTypeTypeDescriptionProvider。
知道如何解决这个问题吗?
【问题讨论】:
-
看看这是否有帮助(你没有展示你的用法,所以我不知道是不是这种情况):stackoverflow.com/a/37375987
-
@LuísAntunes 在那个问题中,答案只是使用 ModelMetadataType 而不是 MetadataType,但我已经在使用 ModelMetadataType.. 无论如何谢谢
标签: c# asp.net-mvc entity-framework asp.net-core