Динамический DbSet в Entity Framework Core - PullRequest
0 голосов
/ 04 октября 2018
string tableName = "TblStudents";
Dictionary<string, Type> myDictionary = new Dictionary<string, Type>()
{
    { "TblStudents", typeof(TblStudent) },
    { "TblTeachers", typeof(TblTeacher) }
};

// Context always same
DBContext dbContext = new DBContext();
DbSet dbSet = dbContext.Set(myDictionary[tableName]);

Выше код из этого поста , где я могу DbSet динамически.Как я могу заставить это работать в Entity Framework Core?

Я получаю ошибку при

DbSet dbSet = dbContext.Set(myDictionary[tableName]);

, похоже, Set метод был изменен в новой версии.

Помощь приветствуется.

1 Ответ

0 голосов
/ 04 октября 2018

Если вы пытаетесь получить DbSet<TEntity> от TEntity, используйте:

var dbSet = dbContext.Set<TEntity>();

Если вы хотите вызвать этот метод на основе имени строки и вашего словаря, вы получитеиспользовать отражение.

EF Core, похоже, не имеет неуниверсального DbSet, поэтому вам придется использовать один из неуниверсальных интерфейсов, таких как IQueryable, и я бы включил Func, который вы можете вызвать, чтобы получить IQueryable вместо просто типа, если вы настаиваете на маршруте отображения словаря.Например:

var myDictionary = new Dictionary<string, Func<DbContext, IQueryable>>()
{
    { "TblStudents", ( DbContext context ) => context.Set<TblStudent>() }
};

var dbSet = myDictionary[ "TblStudents" ].Invoke( dbContext );
...