我们注意到为以下模型生成的元数据:
[Required]
public virtual string Title { get; set; }
看起来像这样
{
nameOnServer: "Title",
dataType: "String",
isNullable: true
},
换句话说,不会添加必需的验证器。
这是因为NH不使用数据注释。这是没有实现的东西还是我做错了什么?
答案 0 :(得分:1)
是的,这是因为NH不使用数据注释。元数据是使用NHibernate的metadata api构建的,它从.hbm.xml文件,按代码映射或流畅配置获取信息。在元数据生成过程中可以检查模型类的注释,但这不是我们正在研究的东西。也可以在元数据结构创建之后(但在序列化为JSON之前)对其进行后处理,然后添加额外的元数据提示。
另外,我们在SaveChanges过程中有一个(公认的粗略)使用数据注释进行服务器端验证的例子。您可以在BeforeSaveEntities
方法中使用DataAnnotationsValidator类,如下所示:
protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(Dictionary<Type, List<EntityInfo>> saveMap) {
var validator = new DataAnnotationsValidator(this);
validator.ValidateEntities(saveMap, true);
return base.BeforeSaveEntities(saveMap);
}
我知道这不是你的想法(因为它根本不能帮助你进行客户端验证),但是如果你需要的话,它就在那里。
希望这有帮助。