У меня есть следующая модель данных, которая ограничивает ItemTypes с подмножеством События .Каждый ItemType имеет действительный набор Events , это ограничено в таблице ItemEvent.Например, видео может быть {воспроизведено, остановлено, приостановлено}, изображение может быть {изменено, сохранено или передано в общий доступ} и т. Д.

Что такоелучший способ отразить это ограничение в модели Entity, чтобы я мог получить гарантию времени компиляции, что используемое Событие действительно для определенного Предмета?В частности, я рефакторинг метода AddItemEventLog:
public void AddItemEventLog(Item item, string ItemEvent)
{
//
}
Очевидно, это надуманный пример, просто пытаюсь проиллюстрировать - он позволяет разработчику передавать любую строку ItemEvent, которую они хотят.Даже если я создаю перечисление на основе набора результатов ItemEvent, в модели сущностей ничего не будет, чтобы разработчик не мог передать ItemEvent.Resize с элементом типа Видео .
У меня есть Item в качестве базового класса Video, и я попытался переопределить перечисление, но теперь знаю, что это невозможно.Меня меньше интересует проверка действительности события во время выполнения, так как я уже сгенерирую исключение, когда БД выдает нарушение FK.Я хочу пресечь это в зародыше во время кодирования, если это возможно :)
В настоящее время классы смоделированы так, но открыты для любых изменений:
//enums.cs
public enum ItemType : byte
{
Video = 1,
Image = 2,
Document = 3
}
//item.cs
public class Item : BaseModel
{
public int ItemId { get; set; }
public ItemTypeLookup.ItemType ItemType { get; set; }
public string ItemName { get; set; }
}
//video.cs
public class Video : Item
{
public string Width { get; set; }
public string Height { get; set; }
public string Thumb { get; set; }
}