Я хочу написать SQL-запрос в EF Core. Я пользуюсь сервисом AddDbContextFactory
. К сожалению, у него нет метода SqlQuery
. Как я могу написать свои запросы?
Мой Startup.cs
services.AddDbContextFactory<DBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ConnectionStrings")),
lifetime: ServiceLifetime.Transient);
Я ввожу DbContextFactory на свою страницу бритвы:
@inject IDbContextFactory<DBContext> DbFactory
Вот мой код:
string UserId = "a5bddfc0-ee0d-4d33-b384-60629154aad9";
using DBContext db = DbFactory.CreateDbContext();
var result = db.Database.SqlQuery<List<Post>>(@$"SELECT * FROM Posts AS P WHERE P.SenderId IN (SELECT FollowingId FROM Followers WHERE FollowerId = '{UserId}'); ");
Вот ошибка:
«DatabaseFacade» не содержит определения для «SqlQuery», и не может быть найден доступный метод расширения «SqlQuery», принимающий первый аргумент типа «DatabaseFacade» (вам не хватает директивы using или ссылки на сборку?)
Есть ли способ написания SQL-запросов?
Обновление вопроса:
Я сталкиваюсь с ошибкой, даже когда использую AddDbContext
. Я использую EF Core 6.
SqlQuery
— это метод для платформы сущностей (EF), который не принадлежит EF Core.
Добавьте using Microsoft.EntityFrameworkCore
вверху файла кода.
и вот код:
string UserId = "a5bddfc0-ee0d-4d33-b384-60629154aad9";
using DBContext db = DbFactory.CreateDbContext();
var result = db.Posts.FromSqlRaw(@$"SELECT * FROM Posts AS P WHERE P.SenderId IN (SELECT FollowingId FROM Followers WHERE FollowerId = '{UserId}'); ").ToList();
Да, но если ты собираешься это сделать, ты можешь просто использовать Dapper.
Возможно, вам не хватает
using
в верхней части вашего файла кода ... с использованием ядра инфраструктуры сущностей, как бы ни называлась конкретная библиотека.