Способ справиться с этим - это сочетание частичных классов и специального атрибута, который позволяет вам присоединять метаданные к другому классу.
Структура сущностей уже помогает вам, генерируя все классы как частичные классы.Итак, если у вас в вашей модели есть сущность под названием «Настройки», EF создаст это:
public partial class Setting : INotifyPropertyChanging, INotifyPropertyChanged
{
// Auto-gen Properties, methods, etc go here.
}
Это означает, что вы можете иметь любое количество других partial class Setting
фрагментов в других файлах, что EF не будетнажмите, если / когда вы восстанавливаете этот код.Если вы хотите добавить к этому атрибуты проверки данных, необходимо выполнить два шага:
Присоединить атрибут MetadataType к классу Setting.В теле этого частичного фрагмента класса не должно быть ничего, оно только там, чтобы связать атрибут.
[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, имя и тип полей должны совпадать между классом метаданных и соответствующим классом, чтобы это работало.