添加数据注释到Entity Framework(或Linq to SQL)生成的类
是否可以自动将更多Data Anootation
成员(如Range
, Required
,…)添加到Entity Framework
或Linq to SQL
生成的类?
我想对我的类使用数据注释validation
谢谢
要点:与此主题相关: 使用元数据和entity framework来validation使用数据注释
编辑1)
我为Northwind数据库创建一个entity framework模型并添加Product类。代码的一部分是这样的:
[EdmEntityTypeAttribute(NamespaceName="NorthwindModel", Name="Product")] [Serializable()] [DataContractAttribute(IsReference=true)] public partial class Product : EntityObject { #region Factory Method /// /// Create a new Product object. /// /// Initial value of the ProductID property. /// Initial value of the ProductName property. /// Initial value of the Discontinued property. public static Product CreateProduct(global::System.Int32 productID, global::System.String productName, global::System.Boolean discontinued) { Product product = new Product(); product.ProductID = productID; product.ProductName = productName; product.Discontinued = discontinued; return product; } #endregion #region Primitive Properties /// /// No Metadata Documentation available. /// [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] [DataMemberAttribute()] public global::System.Int32 ProductID { get { return _ProductID; } set { if (_ProductID != value) { OnProductIDChanging(value); ReportPropertyChanging("ProductID"); _ProductID = StructuralObject.SetValidValue(value); ReportPropertyChanged("ProductID"); OnProductIDChanged(); } } } private global::System.Int32 _ProductID; partial void OnProductIDChanging(global::System.Int32 value); partial void OnProductIDChanged();
我希望ProductID是必需的但我无法以这种方式编写代码:
public partial class Product { [Required(ErrorMessage="nima")] public global::System.Int32 ProductID; }
是。 您需要为每个实体创建第二个分部类,并将其链接到具有替代属性的辅助类。
假设您有一个生成的partial class Customer { public string Name { get; set; } }
partial class Customer { public string Name { get; set; } }
生成的类将始终标记为partial。
然后你需要添加一个文件:
[MetadataType(typeof(CustomerMetadata))] public partial class Customer { // it's possible to add logic and non-mapped properties here } public class CustomerMetadata { [Required(ErrorMessage="Name is required")] public object Name { get; set; } // note the 'object' type, can be anything }
我个人认为这不是一个非常优雅的解决方案,但它有效。