#c# #.net #entity-framework-core
Вопрос:
В настоящее время я нахожусь в процессе реализации динамического решения для возвращаемых хранимых процедур, и весь интерфейс запускается из базы данных.
У меня проблема, когда я пытаюсь динамически вызвать модель на основе строки из базы данных. У меня есть столбец под названием «TableReference», в котором, по сути, содержится название модели.
Мне нужно это сделать, чтобы вызвать хранимые процедуры и получить результаты, как ожидалось, и в правильном формате.
Я пробовал использовать отражение, но, похоже, не могу заставить его работать.
Текущий код, который у меня есть, таков
var type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(t => t.Name == Reference.TableReference);
var method = _context.GetType().GetMethods().First(x => x.IsGenericMehtod amp;amp; x.Name == "Set");
var generic = method.MakeGenericMethod(type);
var set = <DbSet<(THIS IS WHAT I NEED TO BE DYNAMIC)>>generic.Invoke(_context, null);
var results = await set.FromSqlRaw("exec PROCEDURE_NAME").ToListAsync();
Я знаю, что это работает с точки зрения кода, так как, когда я пишу <DbSet<>>
с типом, который, как я ожидаю, он вернет, он возвращает результаты. Однако, как упоминалось ранее, это полностью динамично или должно быть полностью динамичным.
Любая помощь будет очень признательна!
Спасибо
Комментарии:
1. Это несовместимо с EF. Вы можете использовать обычный ADO.NET если вам нужно изучить результирующие наборы перед загрузкой в объекты в клиенте.
2. Мне на самом деле не нужна ссылка на объект, так как она возвращается сразу, но без того, чтобы я получил ошибку, потому
FromSqlRaw
что ее не существует, есть ли способ применить это к любому, чтобы обойти это?3. Вам придется продолжить размышления для вызова FromSqlRaw<TEntity> <TEntity> docs.microsoft.com/en-us/dotnet/api/…
4. Мы разработали полную платформу, основанную на интерфейсе, управляемом хранимыми процедурами. Забудьте о наборе данных<>, так как в данном случае это совсем не динамично, и каждый раз, когда вы добавляете что-то в таблицу, вам также потребуется настроить свои классы в соответствии с вашими данными, что противоречит всей цели сделать их управляемыми процедурами. Если вы хотите перейти к полной динамике, ваш код должен служить только в качестве анализатора данных и построителя пользовательского интерфейса на основе данных, возвращаемых из процедур и мета-таблиц.