Я не знаком с инструментами, доступными в C #, но ваш вопрос, кажется, в основном касается хранения, а не C #.
Как вы храните DAG, без сомнения, будет зависеть от вариантов использования, которые вы имеете в виду. Вы можете представить группу обеспечения доступности баз данных в двух таблицах в реляционной базе данных, например, где одна таблица содержит информацию об узлах (A, B, C и т. Д.), А другая содержит информацию о ребрах между узлами (A -> B, A -> C и т. Д.).
Также неплохо бы использовать графическую базу данных, такую как Neo4j.
Ваш пробег будет варьироваться, когда дело касается таких вещей, как горизонтальное масштабирование и одновременный доступ, в зависимости от выбранного вами подхода. Возможно, вы захотите сохранить денормализованное представление для ускорения некоторых видов запросов, но такая стратегия предполагает компромиссы, которые вы захотите понять, прежде чем идти с ним.