Есть ли разница между добавлением DbSet вручную или разрешением автоматического создания таблицы? - PullRequest
1 голос
/ 27 сентября 2011

У меня есть тип с именем TypeA, и где-то в TypeA есть свойство TypeB (которое не содержит ничего, кроме ID и String).

Использование Entity Framework, Я создал DbSet из TypeA - public DbSet<TypeA>.

. Это прекрасно создает столбец TypeB в базе данных - однако теперь мне нужно заполнить некоторые данные.Поскольку TypeB не существует в исходном DbContext, я не могу заполнить его данными.

Поэтому я добавил public DbSet<TypeB> к своему исходному DbContext, и он даже не обнаружил изменения/ разница в схеме базы данных.

Итак, это заставило меня задуматься, и мой вопрос: есть ли разница в создании отдельного DbSet поверх того, которое автоматически создается отношением?

Пример кода

  public class TypeA
    {

        public int id { get; set; }


        public string name { get; set; }


        public TypeB foo { get; set; }
    }

    public class TypeB
    {
        public int ID { get; set; }

        public string name { get; set; }
    }

1 Ответ

1 голос
/ 27 сентября 2011

Да, есть разница.

С точки зрения дизайна точка класса DbSet равна для воплощения шаблона репозитория :

Концептуально репозиторий инкапсулирует набор объектов, сохраненных в хранилище данных, и операции, выполняемые над ними, обеспечивая более объектно-ориентированное представление уровня персистентности.Хранилище также поддерживает цель достижения чистого разделения и односторонней зависимости между доменом и слоями отображения данных.

Его цель - инкапсулировать CRUD для данного объекта.Для этого репозиторий не может ограничиваться одной таблицей.Иногда он должен работать с деревом объектов в БД.

В вашем случае наличие DbSet для обоих типов даст вам хранилище для прямого доступа к этой сущности.Это позволит вам запрашивать непосредственно для TypeB или напрямую создавать / обновлять TypeB экземпляры в БД, вместо того, чтобы всегда иметь необходимость всегда выполнять корень ваших запросов в TypeA.

Часть этого зависит от вашегоассоциации, хотя.Если у вас есть ограничение на TypeB, которое требует TypeA, то вы не можете создать их без TypeA.Однако вы по-прежнему можете запрашивать их напрямую.

Вы по-прежнему можете создавать или обновлять TypeB экземпляры без DbSet<TypeB> - просто присоедините один экземпляр к TypeA и работайте с DbSet<TypeA>.

...