Внешний ключ, указывающий на составной ключ - PullRequest
2 голосов
/ 03 ноября 2011

Я работаю над моделью сущностей POCO в существующей базе данных. Одна таблица имеет составной ключ

public class Table1
{
  [Key]
  public virtual int Key1 {get; set;}

  [Key]
  public virtual int Key2 {get; set;}

  public virtual ICollection<Table2> Tables2 {get; set;}

  //more properties here...
}

и вторая таблица без первичного ключа, но с 2 свойствами, ссылающимися на составной ключ таблицы 1.

public class Table2
{
  public virtual int Key1 {get; set;}

  public virtual int Key2 {get; set;}

  [InverseProperty("Tables2")]
  public virtual Table1 Table1 {get; set;}

  //more properties here...
}

ВОПРОС Можно ли сопоставить эту ассоциацию, используя DataAnnotations? Если да, то как?

1 Ответ

3 голосов
/ 03 ноября 2011

Да, вы можете определить составной внешний ключ с аннотациями данных:

public class Table2
{
    [ForeignKey("Table1"), Column(Order = 1)]
    public virtual int Key1 {get; set;}

    [ForeignKey("Table1"), Column(Order = 2)]
    public virtual int Key2 {get; set;}

    [InverseProperty("Tables2")]
    public virtual Table1 Table1 {get; set;}

   //more properties here...
}

Или альтернативно:

public class Table2
{
    public virtual int Key1 {get; set;}

    public virtual int Key2 {get; set;}

    [InverseProperty("Tables2")]
    [ForeignKey("Key1, Key2")]
    public virtual Table1 Table1 {get; set;}

   //more properties here...
}

Но реальная проблема в том, что у вашего Table2 нет первичного ключа, который требуется Entity Framework. Я не думаю, что есть какой-то обходной путь для решения этой проблемы, кроме добавления первичного ключа в таблицу.

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