我想使用验证注释。
我已经有一个由实体框架实现的模型。
我需要数据验证,并且我知道有一个非常好的数据注释......
但我真的不知道如何正确使用它与实体框架。
我应该编辑实体吗?或者我应该写单独的课程?或者我应该编写从实体继承的类?
你能告诉我应该使用的最佳方法吗?
我想编写尽可能少的代码。
处理此问题的方法是结合部分类和特殊属性,该属性允许您将元数据附加到另一个类。
实体框架已经通过将所有类生成为部分类来帮助您解决此问题。因此,如果模型中有一个名为“Settings”的实体,EF 将创建以下内容:
public partial class Setting : INotifyPropertyChanging, INotifyPropertyChanged
{
// Auto-gen Properties, methods, etc go here.
}
这意味着您可以拥有任意数量的其他partial class Setting
其他文件中的片段,如果/当您重新生成该代码时 EF 不会触及这些片段。如果要为此添加数据验证属性,需要两个步骤:
-
将 MetadataType 属性附加到设置类。该分部类片段的主体中不需要有任何内容,它仅用于关联属性。
[MetadataType(typeof(SettingMetadata))]
public partial class Setting
{
}
-
创建与 EF 类具有相同公共字段名称的第二个类,并关联所需的任何数据验证属性。编译器将按名称将元数据类字段与 EF 类字段进行匹配,并且将附加到第二个类的任何元数据也添加到第一个类中。
public class SettingMetadata
{
[Display(Name="Base Rate")]
[Required]
public decimal Rate
{
get;
set;
}
[Display(Name = "Permit Payments")]
public Boolean AllowPayments
{
get;
set;
}
[Display(Name = "Base URL For Web Service")]
[Required]
[SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Type must match linked metadata type.")]
public string WebServiceUrl
{
get;
set;
}
}
正如 FxCop 抑制消息中提到的,名称and type元数据类和关联类之间的字段必须匹配才能正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)