我需要将数据存储在与两个具有多对多关系的模型相关的数据库中。
每个Client
可以包含多个Contacts
,每个联系人都可以有多个Clients
。每个联系人都优先考虑每个客户。我创建了一个模型,其中包含一个由Client
ID和Contact
ID组成的复合键,该ID具有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; }
}