我已按照here所述尝试了DataAnnotation,但它对我不起作用。
我有一个包含以下结构的表
Table - Category
id int (pk not null)
CategoryName varchar(100) (null)
我已经创建了我的edmx文件。
我已经创建了Category.cs文件,如下所示。
[MetadataType(typeof(CategoryMetaData))]
public partial class Category
{
}
public class CategoryMetaData
{
[Required(ErrorMessage = "Category Name is required.")]
public object CategoryName;
}
但我的验证无效。
有什么我错过的吗?
答案 0 :(得分:2)
我发现ObjectContext不能与DataAnnotations一起使用。你必须切换到使用DbContext,然后它的工作原理。下载EF 4.x DbContext T4文件并在您的模型上试用。不知道为什么会这样,希望专家能够参与进来。
答案 1 :(得分:0)
CateogryMetaData中的CategoryName应该是一个属性,并且与原始属性具有相同的类型。试试这个:
public class CategoryMetaData
{
[Required(ErrorMessage = "Category Name is required.")]
public string CategoryName {get;set;}
}
答案 2 :(得分:0)
<强> UPD 强> Solution here.
在验证之前,您需要手动注册元数据类
==================
我认为这个问题与EF为您的实体生成的代理类有关。您可以在运行时轻松检查:只需查看GetType()。FullName。
如果属性被标记为不可继承,则不会在继承的类中应用它。代理类派生自实体类,因此不可继承的属性会丢失。
我正在尝试通过手动检查属性在WebForms项目中使用DataAnnotations。但不是
System.ComponentModel.DataAnnotations.Validator.TryValidateObject(entity, new ValidationContext(value, null, null), results, true);
,也不
PropertyInfo[] properties = value.GetType()
.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
var validationProperties = properties.Select(prop => new
{
Property = prop,
ValidationAttributes = Attribute.GetCustomAttributes(prop, typeof(ValidationAttribute), true)
}).Where(valProp => valProp.ValidationAttributes.Any());
不起作用。 我尝试使用与EF无关的简单类来编写这些代码,并且正确地找到并检查了所有DataAnnotations属性。
[MetadataType(typeof(TestValidObject_Metadata))]
public class TestValidObject
{
public string IdName { get; set; }
}
public class TestValidObject_Metadata
{
[Required, DisplayName("Id name")]
public object IdName { get; set; }
}
RequiredAttribute的定义是
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter, AllowMultiple = false)]
public class RequiredAttribute : ValidationAttribute
,默认情况下,它成为可继承的属性。我不知道为什么
Attribute.GetCustomAttributes(prop, typeof(ValidationAttribute), true)
// true specifies to also search the ancestors of element for custom attributes.
没有抓住它。
欢迎任何想法。