Получить список моделей сущностей в DbContext Entity Framework Core 2.1

Я пытаюсь найти способ получить список всех моделей сущностей в моем DbContext. Например, если у меня есть две модели под названием «Клиент» и «Счет-фактура», определенные в C #, которые с помощью первого кода я создал объекты EF и базу данных, как мне теперь запросить DbContext, чтобы получить список, в котором есть «Клиент» и «Счет-фактура», т. Е. все сущности в этом контексте? Я хочу иметь возможность вызывать метод, который возвращает список всех сущностей - не данные, а просто список сущностей.

Мне кажется, это должно быть так просто, но либо это непросто, либо я чего-то упускаю - наверное, последнее. ;-).

Может ли кто-нибудь указать мне правильное направление? Спасибо!!


person Kevin    schedule 14.01.2019    source источник
comment
Что вы подразумеваете под списком всех сущностей, а не данных? Список их идентификаторов? Что содержит Список, как не данные?   -  person xr280xr    schedule 14.01.2019


Ответы (2)


Вы можете использовать Модель свойство, чтобы получить связанный IModel, затем GetEntityTypes метод для перечисления всех IEntityType с. , свойство ClrType IEntityType предоставит вам связанный тип класса, например

DbContext db = ...;
var entityTypes = db.Model.GetEntityTypes().Select(t => t.ClrType).ToList();

IEntityType имеет много полезных свойств и (расширений) методов для получения информации о первичных / альтернативных ключах, внешних ключах, навигации, свойствах и т. Д. На случай, если они вам понадобятся.

person Ivan Stoev    schedule 14.01.2019
comment
Спасибо! Это было именно то, что мне было нужно! Я ценю вашу помощь. - person Kevin; 14.01.2019
comment
Когда я пытаюсь использовать эти типы для использования context.Entry (Type) .Reload (), возникает ошибка во время выполнения. Есть ли способ добиться этого? - person MSK; 14.10.2019
comment
@MSK Не ​​понимаю, что вы имеете в виду - метод context.Entry требует экземпляра сущности (объекта), а не типа. - person Ivan Stoev; 14.10.2019
comment
Спасибо @IvanStoev, я тоже узнал. На самом деле мне нужно универсальное решение для перезагрузки базы данных. - person MSK; 16.10.2019
comment
@IvanStoev Как я могу получить те же типы сущностей, используя DbContext имя, используя отражение, а не экземпляр? - person TanvirArjel; 29.12.2019
comment
@TanvirArjel Вы не можете этого сделать. Что именно вы собираетесь отражать? Свойства типа DbSet<>? Это совсем не обязательно. См. Включение типов в модель. Вот почему для начала нам нужен IModel экземпляр. - person Ivan Stoev; 29.12.2019
comment
@IvanStoev Я могу получить свойства DbSet с отражением, но не могу найти способ получить модели сущностей, которые добавляются как modelBuilder.Entity<Employee>(). На самом деле мне нужно и то, и другое. Что мне делать в таком случае? На самом деле мне нужны все типы, включенные в модель DbContext с использованием отражения. - person TanvirArjel; 29.12.2019
comment
@TanvirArjel В основном вы спрашиваете, как получить то, что код делает внутри OnModelCreating без фактического выполнения этого кода, что, по-видимому, невозможно. - person Ivan Stoev; 29.12.2019
comment
@IvanStoev На самом деле мне нужно добавить все модели из одного DbConext в другой, чтобы я мог запрашивать, обновлять одну и ту же базу данных из двух DbConexts одновременно. Подскажите, пожалуйста, как это сделать проще всего? Примечание. Ссылка на первый контекст DbContext недоступна во второй сборке DbConext. Так что я должен делать это с помощью рефлексии. - person TanvirArjel; 29.12.2019
comment
@IvanStoev Могу ли я просто динамически добавить сущность в модель DbContext непосредственно перед выполнением запроса, если эта сущность не добавлена ​​в модель DbContext либо как DbSet, либо как modelBuilder.Entity<TEntity>(). - person TanvirArjel; 29.12.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person TanvirArjel; 29.12.2019

Вы можете ссылаться на документацию по адресу: https://docs.microsoft.com/en-us/ef/core/querying/related-data

Например, Если у вас есть блоги и сообщения в виде двух таблиц, вы можете получить связанную таблицу, как показано ниже. Это зависит от того, как отношения представлены в двух таблицах.

Вы также можете добавить предложение where, чтобы получать только выбранные записи.

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
        .ToList();
}
person Manoj Choudhari    schedule 14.01.2019
comment
Спасибо за ваш ответ, но я ищу просто список всех моделей сущностей в контексте. Например, я хотел бы иметь возможность набрать myContext.GetEntityModels () и получить список всех моделей в этом контексте, а не данные или какие-либо отношения между ними. - person Kevin; 14.01.2019