Об этом уже спрашивали и отвечали, но для. Net Framework. Я изо всех сил пытаюсь достичь той же функциональности в. Net Core.
У меня есть метод, который получает имя объекта в виде строки (вместе с некоторыми критериями выбора). Я хочу получить тип Entity, используя строку entityName и запросить EF.
В предыдущем ответе с использованием EF 6 было предложено следующее
public async Task<bool> MyMethod(string _type)
{
Type type = Type.GetType(_type);
var tableSet = _context.Set(type);
var list = await db.ToListAsync();
// do something
}
// pass the full namespace of class
var result = await MyMethod("Namespace.Models.MyClass")
К сожалению context.Set
больше не принимает параметр, так что это не не возможно.
Я пробовал несколько способов получить и использовать тип с контекстом, но я бью кирпичную стену. Я дам здесь тестовый код - но ничего из этого не достигает того, чего я хочу.
public IList LoadByKey(string entityName, params string[] parameters)
{
// Get type from entity name string - Include assembly
Type clType = Type.GetType($"{entityName},Savant.Pulse.Testbeds.ReferenceData.DB");
// Create instance using the type retrieved from GetType, still just an Object
var instantiatedObject = Activator.CreateInstance(clType);
// Get the entity type from the context itself. This does return the correct type.
// So I thought I was heading in the correct direction.
var entityType = _context.Model.FindEntityType(entityName);
// Get a DbSet of the correct type. Once again this does return what you think you'd need.
// But it's an Object? type returned. I can't seem to cast it to the correct type from the entityName.
var dbSet = _context.GetType().GetProperty(entityType.ClrType.Name).GetValue(_context);
throw new System.NotImplementedException();
}