Когда данные действительно извлекаются из базы данных с использованием EF Core?

Я попытался внести изменения в файл database.php, присутствующий в папке config, он выглядит примерно так:

'default' => 'mysql',
....
...
'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'sample'),
            'username'  => env('DB_USERNAME', 'root'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

Я не использую какую-либо виртуальную машину, я использую свой локальный компьютер с пользователем базы данных как root и password null.

Я также изменил файл .env, и он выглядит примерно так:

APP_ENV=local
APP_DEBUG=true
APP_KEY=zLzPMzs5W4FNNuguTmbG8M0iFqhIVnsP

DB_HOST=localhost
DB_DATABASE=sample
DB_USERNAME=root
DB_PASSWORD=null

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Даже после выполнения всех изменений, когда я пытаюсь зарегистрироваться используя регистрационную форму, которая поставляется с laravel, я пытаюсь добавить пользователя в свою базу данных. Я получаю следующую ошибку: [gg]

После выполнения всех изменений Я очистил кеш и снова загрузил его, и теперь он работает для меня! если любой из них также сталкивается с той же проблемой, просто запустите следующие команды

php artisan cache:clear
php artisan config:cache

0
задан marc_s 3 March 2019 в 17:35
поделиться

2 ответа

Для меня это означает, что база данных уже опрошена, и ef не ждал, пока я не попрошу об этом.

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

Является ли мое мнение о том, что запрос linq выполняется неправильно?

Нет, однако это не так

Почему это происходит? ?

LINQ извлекает значения ленивым образом, что означает, что он ждет, пока вы не выполните какое-либо перечисление для него. В окне просмотра Visual Studio запрашивается оценка запроса, чтобы вы могли видеть фактические детали.

0
ответ дан Camilo Terevinto 3 March 2019 в 17:35
поделиться

LINQ поддерживает два поведения выполнения: отложенное выполнение и немедленное выполнение. Отложенное выполнение означает, что оценка выражения задерживается до тех пор, пока его фактическое значение фактически не требуется. Это значительно повышает производительность, избегая ненужного выполнения.

Отложенное выполнение применимо к любой коллекции в памяти, а также к удаленным поставщикам LINQ, таким как LINQ-to-SQL, LINQ-to-Entities, LINQ-to-XML и т. Д.

В представленном рассматриваемом примере кажется, что запрос выполнен на where, но на самом деле этого не происходит. Запрос выполняется при вызове .FirstAsync(). Это означает, что вам действительно нужны данные, а C # выполняет запрос, извлекает данные и сохраняет данные в памяти.

Если вы хотите немедленного поведения при выполнении, вы можете использовать .ToList(), он извлечет все спроецированные данные и сохранит их в памяти.

var result =(from tkn in Db.Set<TableA>()
            where tkn.IsActive == true
            & tkn.Token == token
            select tkn.RelatedObjectMappedToTableB).ToList();

Подробнее см. в статье

.
0
ответ дан habib 3 March 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: