所以我使用this教程来生成我将在我的应用程序中使用的poco类..问题是我不应该修改生成的cs文件导致它们被自动生成...我该如何添加像[必需]等类似的东西?请帮忙
答案 0 :(得分:23)
您无法直接添加它(除非您修改T4模板为您创建它们),但您可以尝试使用ASP.NET动态数据中引入的技巧。所有POCO类都定义为部分类。所以我们来定义你的部分内容:
using System.ComponentModel.DataAnnotations;
[MetadataType(typeof(MyClassMetadata))]
public partial class MyClass
{
private class MyClassMetadata
{
[Required]
public object Id;
[Required]
[StringLength(100)]
public object Name;
}
}
元数据类是仅保存元数据的特殊类型 - 从不使用它。字段名称必须与实际类中的相应字段相同(字段类型无关紧要,因此您可以使用object
)。
无论如何,在ASP.NET MVC中,应该为每个视图使用专门的View模型并传递您需要的数据,以便将验证属性放置在视图模型类中。
答案 1 :(得分:0)
生成的POCO上的属性来自模型中实体的构面。例如对于[Required]
,请确保该字段为“非空”,对于[StringLength(n)]
,请确保nvarchar(n)
方面的数据类型为MaxLength
。
答案 2 :(得分:0)
进一步扩大答案。通过使用Microsoft Patterns&实践企业库5验证块,除了通过普通数据注释提供的可能性之外,您还可以开辟一系列验证可能性。
using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
[HasSelfValidation]
public partial class Category : ICategory
{
[SelfValidation]
public void Validate(ValidationResults validationResults)
{
if (this.Title === "Credo")
{
validationResults.AddResult(
new ValidationResult(
"Category title cannot be a veiled reference to a former cool 2000AD character.",
this,
null,
null,
null));
}
validationResults.AddAllResults(
ValidationFactory
.CreateValidator<ICategory>()
.Validate(this));
}
}
using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
public interface ICategory
{
int Id
{
get;
set;
}
[Required]
[StringLengthValidator(1, 50, MessageTemplate = "Category title should be a maximum of 50 characters in length.")]
string Title
{
get;
set;
}
}