Как передать константу в атрибут внешнего ключа?

#c# #entity-framework #code-first

#c# #entity-framework #сначала код

Вопрос:

У меня есть модель с составным ключом и составной внешний ключ. Возможно ли передать константу в аннотацию внешнего ключа, а не в имя столбца?

Текущая модель:

 [Table("PBDS.INTERACTIONS")]
public partial class Interaction
{
    // NOTE: The primary key for the INTERACTIONS table is a composite key
    //       consisting of:
    //           - ACCOUNT_ID
    //           - CONTACT_DATE
    //           - CONTACT_SEQ
    //           - PAGE

    [Key]
    [Column("ACCOUNT_ID", Order = 0)]
    public int ACCOUNT_ID { get; set; }

    [Key]
    [Column("CONTACT_DATE", Order = 1)]
    public DateTime CONTACT_DATE { get; set; }

    [Key]
    [Column("CONTACT_SEQ", Order = 2)]
    public int CONTACT_SEQ { get; set; }

    [Key]
    [Column("PAGE", Order = 3)]
    public int PAGE { get; set; }

    [ForeignKey("ACCOUNT_ID,CONTACT_DATE,CONTACT_SEQ,PAGE,DATA_VALUE")]
    public InteractionData InteractionData { get; set; }

}
  

DATA_VALUE всегда будет константой для моих целей. В идеале, я бы надеялся, что у меня может быть настройка внешнего ключа, подобная этой:

Желаемая модель:

 [Table("PBDS.INTERACTIONS")]
public partial class Interaction
{
    // NOTE: The primary key for the INTERACTIONS table is a composite key
    //       consisting of:
    //           - ACCOUNT_ID
    //           - CONTACT_DATE
    //           - CONTACT_SEQ
    //           - PAGE

    [Key]
    [Column("ACCOUNT_ID", Order = 0)]
    public int ACCOUNT_ID { get; set; }

    [Key]
    [Column("CONTACT_DATE", Order = 1)]
    public DateTime CONTACT_DATE { get; set; }

    [Key]
    [Column("CONTACT_SEQ", Order = 2)]
    public int CONTACT_SEQ { get; set; }

    [Key]
    [Column("PAGE", Order = 3)]
    public int PAGE { get; set; }

    [ForeignKey("ACCOUNT_ID,CONTACT_DATE,CONTACT_SEQ,PAGE,<Net_Cost_Constant_String>")]
    public InteractionData NetCost { get; set; }

    [ForeignKey("ACCOUNT_ID,CONTACT_DATE,CONTACT_SEQ,PAGE,<Airing_Phone_Constant_String>")]
    public InteractionData AiringPhone { get; set; }

    [ForeignKey("ACCOUNT_ID,CONTACT_DATE,CONTACT_SEQ,PAGE,<RepFirm_Constant_String>")]
    public InteractionData RepFirm { get; set; }

    [ForeignKey("ACCOUNT_ID,CONTACT_DATE,CONTACT_SEQ,PAGE,<Week_Day_Constant_String>")]
    public InteractionData WeekDay { get; set; }

}
  

Обратите внимание, что в DATA_VALUE есть 130 уникальных значений, но я хочу, чтобы здесь были перечислены только 4.

Возможно ли это? Альтернативные методы также приветствуются.

Комментарии:

1. Поскольку вы не упоминаете свой ORM, я предполагаю, что вы используете EF. Пожалуйста, отредактируйте вопрос, если я ошибаюсь.

2. «DATA_VALUE всегда будет константой для моих целей». Зачем вам нужна связь внешнего ключа с таблицей, где когда-либо используется только одна строка?

3. @CamiloTerevinto Мой вопрос направлен на аннотацию ForeignKey, которая имеет структуру параметров, отличную от вашего предлагаемого дубликата. Мне это не кажется дубликатом, и ответы на этот вопрос мне не помогают.

4. @CamiloTerevinto Я согласен, что это странно, но мне нужно сохранить атрибут Table для согласованности кода, и у меня нет доступа к DATA_VALUE в моем классе взаимодействий. Это не позволяет вам объявлять переменные, если они не соответствуют столбцу в таблице. Вероятно, это лучший способ справиться с этим. Если это так, я открыт для предложений.

5. @jpaugh Технически это была бы константа 4 отдельных раза с 4 разными константами. У меня нет доступа к DATA_VALUE из моего класса взаимодействий (или любой другой таблицы в базе данных, если на то пошло), но мне нужно использовать его как часть составного ключа для получения отдельных записей из другой таблицы.