Можно ли создать атрибут C #, который представляет собой комбинацию других атрибутов, которые выбираются при первой миграции кода Entity Framework - PullRequest
0 голосов
/ 22 мая 2018

Я хочу уменьшить повторяющийся код, где я указываю одинаковые атрибуты для свойства объекта, используемого в нескольких объектах и ​​связанных таблицах базы данных.

Я использую атрибуты свойства, чтобы определить, как свойство должно быть сохранено вбаза данных и как она должна называться в элементах пользовательского интерфейса.В моем случае это свойство появляется в нескольких таблицах / объектах, и я хочу, чтобы оно везде имело одинаковые атрибуты.Я также хочу, чтобы эти атрибуты были обнаружены при первой миграции кода 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";
     }
}

Есть ли другой способ уменьшить это повторение?

Методы, использующие добавление во время выполненияАтрибуты не помогут, потому что похоже, что первые миграции кода структуры сущности смотрят только на атрибуты времени компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...