Я разрабатываю веб-приложение, связанное с базой данных, используя MVC Pattern и EF 6.0.Чтобы убедиться, что данные, введенные в мое веб-приложение, верны, я хочу использовать аннотации данных.
Я следовал этому учебнику, но в данный момент я застрял в последней части.
Написано, что:
Добавление атрибутов проверки непосредственно в класс модели работает, когда вы не ожидаете, что база данных изменится;однако, если ваша база данных изменится и вам нужно будет обновить класс модели, вы потеряете все атрибуты, которые вы применили к классу модели.Этот подход может быть очень неэффективным и может привести к потере важных правил проверки.
Чтобы избежать этой проблемы, вы можете добавить класс метаданных, который содержит атрибуты.Когда вы связываете класс модели с классом метаданных, эти атрибуты применяются к модели.При таком подходе модельный класс может быть восстановлен без потери всех атрибутов, которые были применены к классу метаданных.
Поэтому я следовал инструкциям по созданию класса метаданных и частичных классов.
В последней части урока мы просим обновить модель, которую я сделал.Однако при этом аннотации данных, которые должны присутствовать в моем классе, нигде не найти.Они присутствовали до обновления, но были стерты из моего класса.
Предварительно обновленный / обновленный класс работает нормально.
После обновления класс, кажется, не применяет никаких ограничений, например, я могувставьте нового клиента в возрасте 11 лет, даже если значение не должно превышать 10.
Это мое предварительное обновление класса:
public partial class TaClient
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public TaClient()
{
this.TaBracelets = new HashSet<TaBracelet>();
}
public int IdClient { get; set; }
public string FirstName { get; set; }
[StringLength(50)] //data annotation for FirstName
public string LastName { get; set; }
[StringLength(50)] //data annotation for LastName
public string Sex { get; set; }
public int Height { get; set; }
[Range(3,10)] // data annotation for Age
public int Age { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<TaBracelet> TaBracelets { get; set; }
}
Это мое обновление после класса:
public partial class TaClient
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public TaClient()
{
this.TaBracelets = new HashSet<TaBracelet>();
}
public int IdClient { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Sex { get; set; }
public int Height { get; set; }
public int Age { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<TaBracelet> TaBracelets { get; set; }
}
это мой класс метаданных:
public class TaClientMetadata
{
[StringLength(50)]
[Display(Name = "First Name")]
public string FirstName;
[StringLength(50)]
[Display(Name = "Last Name")]
public string LastName;
[Range(3, 10)]
[Display(Name = "Age")]
public int Age;
}
А это мой частичный класс:
public class PartialClasses
{
[MetadataType(typeof(TaClientMetadata))]
public partial class TaClient
{
}
}
Я, вероятно, что-то упустил, понял что-то.