Мне нужно хранить данные в БД, которая связана с двумя моделями, имеющими отношение многие ко многим.
Каждый Client
может иметь много Contacts
, а каждый контакт может иметь много Clients
.Каждый контакт имеет приоритет у каждого клиента.Я сделал модель с составным ключом, состоящим из идентификатора Client
и идентификатора Contact
, который обладает свойством Priority
, но использовать его неудобно.Например, я не знаю хорошего способа упорядочить контакты клиента по приоритету.
Таким образом, использование выглядит следующим образом:
MyDbContext db = new MyDbContext();
ClientModel client = db.Clients.Find(clientId);
ContactModel contact = db.Contacts.Find(contactId);
ContactPriorityModel priorityModel = db.ContactPriorities.Find(clientId, contactId);
int priority = priorityModel.Priority;
Когда у ContactModel
был только один связанный ClientModel
, упорядочивание было таким же простым, как client.Contacts.OrderBy(contact => contact.Priority)
, но при изменении его на много-отношение ко многим вызывает осложнения.
(вероятно, не требуется) код:
public class MyDbContext
{
public DbSet<ClientModel> Clients { get; set; }
public DbSet<ContactModel> Contacts { get; set; }
public DbSet<ContactPriorityModel> ContactPriorities { get; set; }
}
public class ClientModel
{
public int Id { get; set; }
public virtual ICollection<ContactModel> Contacts { get; set; }
// Other properties
}
public class ContactModel
{
public string Id { get; set; }
public virtual ICollection<ClientModel> Clients { get; set; }
// Other properties
}
public class ContactPriorityModel
{
[Key, Column(Order = 0)]
public int ClientId { get; set; }
[Key, Column(Order = 1)]
public string ContactId { get; set; }
public int Priority { get; set; }
}