Я попытался внести изменения в файл 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
Для меня это означает, что база данных уже опрошена, и ef не ждал, пока я не попрошу об этом.
blockquote>Нет, база данных запрашивается точно , потому что вы просили это сделать.
Является ли мое мнение о том, что запрос linq выполняется неправильно?
blockquote>Нет, однако это не так
Почему это происходит? ?
blockquote>LINQ извлекает значения ленивым образом, что означает, что он ждет, пока вы не выполните какое-либо перечисление для него. В окне просмотра Visual Studio запрашивается оценка запроса, чтобы вы могли видеть фактические детали.
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();
Подробнее см. в статье
.