0

У меня есть 2 класса, которые имеют отношение много-много.Добавьте столбец ко многим кодам таблиц отношений. Первая структура сущности

public class Document 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public bool AvailableOffline { get; set; } 

    public string URL { get; set; } 

    public virtual ICollection<Profile> Profiles { get; set; } 

} 

public class Profile 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 

    public virtual ICollection<Document> Documents { get; set; } 
} 

В каждом профиле я хочу иметь поле SortOrder для каждого документа. Так что я сделал объединенную таблицу явно в другом классе

public class ProfileDocuments 
{ 
    [Key, Column(Order = 0)] 
    public int DocumentId { get; set; } 

    [Key, Column(Order = 1)] 
    public int ProfileId { get; set; } 

    public int SortOrder { get; set; } 

    [ForeignKey("DocumentId")] 
    public virtual Document Document { get; set; } 

    [ForeignKey("ProfileId")] 
    public virtual Profile Profile { get; set; } 
} 

Но когда я обновить базу данных таблицы для этого последнего класса не буду иметь столбец SortOrder. Он содержит только 2 внешних ключа. Как я могу сказать EF для создания этой таблицы с моим столбцом?

+0

Каждого 'ICollection <Профиль/Document>' должен стать 'ICollection ' –

+0

Да, конечно. Почему бы вам не ответить на этот вопрос, чтобы я мог его принять – Jepzen

ответ

0

Когда таблица соединений в ассоциации «многие-ко-многим» должна содержать больше информации, чем только два внешних ключа, невозможно сопоставить ассоциацию как «чистую» много-ко-многим (со скрытым классом соединения).

Вам нужен явный класс в модели класса для решения дополнительной информации (как вы уже выяснили), но это также изменяет ассоциацию в 1-n-1:

class Document 
{ 
    ... 
    public virtual ICollection<ProfileDocument> ProfileDocuments { get; set; } 
} 

class Profile 
{ 
    ... 
    public virtual ICollection<ProfileDocument> ProfileDocuments { get; set; } 
} 
Смежные вопросы