Я хочу уменьшить повторяющийся код, где я указываю одинаковые атрибуты для свойства объекта, используемого в нескольких объектах и связанных таблицах базы данных.
Я использую атрибуты свойства, чтобы определить, как свойство должно быть сохранено вбаза данных и как она должна называться в элементах пользовательского интерфейса.В моем случае это свойство появляется в нескольких таблицах / объектах, и я хочу, чтобы оно везде имело одинаковые атрибуты.Я также хочу, чтобы эти атрибуты были обнаружены при первой миграции кода Entity Framework.Похоже, что миграция кода сначала зацикливается на атрибутах и ищет определенные классы, такие как MaxLengthAttribute или классы, которые наследуются от определенных классов.Жаль, что Entity Framework не ищет интерфейсы.
Я не хочу перемещать эту строку в другую таблицу, потому что клиенты, которые будут использовать эти таблицы, ожидают, что к ним будет запрашиваться «CustomerNo».
например:
[Table("foo")]
public class foo {
…
[Column(TypeName="varchar")]
[MaxLength(15)]
[Display(Name="Customer Identifier")]
public string CustomerNo {get; set;}
…
}
[Table("bar")]
public class bar {
…
[Column(TypeName="varchar")]
[MaxLength(15)]
[Display(Name="Customer Identifier")]
public string CustomerNo {get; set;}
…
}
Я хотел бы сделать пользовательский атрибут, который объединяет вышеперечисленные атрибуты в один, как [CustomerNoAttribute] (я знаю, что могу оставить суффикс "Атрибут "он предназначен для уменьшения путаницы с классом CustomerNo).
Нет множественного наследования, поэтому я не могу просто наследовать от ColumnAttribute, MaxLengthAttribute и DisplayAttribute.
Есть ли способ, которым я могуиспользовать композицию, чтобы сделать эту работу?например,
Этот код ниже не работает.Новые внутренние атрибуты не присоединяются к свойствам, которые я помещаю в [CustomerNoAttribute].
public CustomerNoAttribute: Attribute {
public CustomerNoAttribute() {
new MaxLengthAttribute(15);
new DisplayAttribute().Name = "Customer Identifier";
new ColumnAttribute().TypeName = "nvarchar";
}
}
Есть ли другой способ уменьшить это повторение?
Методы, использующие добавление во время выполненияАтрибуты не помогут, потому что похоже, что первые миграции кода структуры сущности смотрят только на атрибуты времени компиляции.