是Validatable對象和MetadataType屬性在部分類由框架如MVC使用,例如。
下面是一個使用MetadataType屬性的例子:
[MetadataType(typeof(UserMetadata))]
public partial class User
{
private class UserMetadata
{
[DisplayName("User Id")]
public long UserId
{
get;
set;
}
[DisplayName("User Name")]
public string UserName
{
get;
set;
}
}
}
當您使用MVC框架,具有這些屬性將被讀取自動生成標籤字段的宗旨,爲相應的顯示器的任何模型/編輯。
使用IValidatableObject
public partial class Apple : IValidatableObject // Assume the Apple class has an IList<Color> property called AvailableColors
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
foreach (var color in this.AvailableColors)
{
if (color.Name == "Blue") // No blue apples, ever!
{
yield return new ValidationResult("You cannot have blue apples.");
}
}
}
}
MVC會拿起這個IValidatableObject並確保通過說到它的方式任何蘋果的驗證步驟將永遠不會在藍色的例子。使用IValidatableObject
編輯
隨着日期範圍關注的一個例子:
public partial class ObjectWithAStartAndEndDate : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.StartDate >= this.EndDate)
{
yield return new ValidationResult("Start and End dates cannot overlap.");
}
}
}
那麼主要確保實體是一件有效的事情? – GraemeMiller
任何類型的業務邏輯,真的。如果您有另一個不同類型的屬性被設置並且不需要其他屬性時需要一個屬性,則可以通過在部分類中實現「ghost方法」來完成此操作。 –
我想我正在使用AutoMapper來製作ViewModels並且它們有顯示名稱。不過,我想我需要在ViewModel和Entity上強制執行所需的等。 – GraemeMiller