Так что в настоящее время у меня есть модель приложения:
Note -> Thing
(примечание может относиться ко многим things
)
A thing
может быть множеством объектов (для этого примера можно использовать Computer
& Car
)
например,
Note -> Computer
-> Car
Итак, сейчас у меня есть схема
Note -> ComputerNote -> Computer
Note -> CarNote -> Car
Проблема в том, что, поскольку ссылки на сущности находятся в отдельных таблицах, требуется написать новый запрос, а не просто использовать фильтрацию в предложении WHERE
.
В идеале было бы неплохо иметь столбец EntityId
& EntityTypeId
& в таблице Note
, который будет содержать первичный ключ связанной сущности и тип сущности. Таким образом, логика приложения могла бы искать все заметки Car
, где автомобиль x
, без отдельного запроса для каждого типа, но ... это означало бы, что я потерял ссылочную целостность. Есть ли лучший способ, или я предложил приемлемый дизайн?
Модель Entity Framework:
public partial class Note
{
public Note()
{
NoteComputer = new HashSet<NoteComputer>();
NoteCar = new HashSet<NoteCar>();
NoteThing = new HashSet<NoteThing>();
}
public int Id { get; set; }
public string Value { get; set; }
public string CreatedByUserId { get; set; }
public DateTime CreatedDateTime { get; set; }
public ICollection<NoteComputer> NoteComputer { get; set; }
public ICollection<NoteCar> NoteCar { get; set; }
public ICollection<NoteThing> NoteThing { get; set; }
}
public partial class NoteCar
{
public int Id { get; set; }
public int NoteId { get; set; }
public int CarId { get; set; }
public Car Car { get; set; }
public Note Note { get; set; }
}
public partial class NoteComputer
{
public int Id { get; set; }
public int NoteId { get; set; }
public int ComputerId { get; set; }
public Computer Computer { get; set; }
public Note Note { get; set; }
}
public partial class NoteThing
{
public int Id { get; set; }
public int NoteId { get; set; }
public int ThingId { get; set; }
public Thing Thing { get; set; }
public Note Note { get; set; }
}