【发布时间】:2020-11-19 10:12:14
【问题描述】:
我正在尝试进行自定义验证 [IsUnique]。检查 is 属性值是否唯一并返回正确的消息。
这是我的代码,但这仅适用于指定的类,是否可以执行通过元数据获取正确类的方法?
public class ArticleMetaData
{
[Required(AllowEmptyStrings = false)]
[IsUnique("Name")]
public String Name{ get; set; }
}
还有我的自定义验证:
class IsUnique : ValidationAttribute
{
public IsUnique(string propertyNames)
{
this.PropertyNames = propertyNames;
}
public string PropertyNames { get; private set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var myproperty = validationContext.ObjectType.GetProperty(PropertyNames);
var value = propiedad.GetValue(validationContext.ObjectInstance, null);
IEnumerable<String> properties;
List<string> propertiesList = new List<string>();
propertiesList.Add(myproperty.Name);
var dba = new myContext();
if (dba.Articles.Any(article => article.Name == (string)value))
{
return new ValidationResult("The name already exist", propertiesList);
}
return null;
}
}
这个想法是只使用注释 [isUnique] 并且该方法采用带有注释的类并搜索相应的实体。
【问题讨论】:
-
您是否试图阻止用户在数据库中保存重复记录?
-
@JuanM.Elosegui 那是我的目标。不重复名称、电子邮件等。它将作为唯一键 SQL
标签: c# .net entity-framework validation data-annotations