Ef Core против Linq на интерполированной строке - PullRequest
5 голосов
/ 18 июня 2019

Используя интерполированные строки для отправки запросов к серверу sql, почему при использовании datacontext в LINQ to SQL нужно добавлять одинарные кавычки?

db.ExecuteCommand($"delete table where date = '{date:yyyy-MM-dd}'");

, а в EF Core необходимо удалитьих?

db.Database.ExecuteSqlCommand($"delete table where date = {date:yyyy-MM-dd}"); 

и почему в EF Core, если вы используете String.Format вместо интерполяции, вам нужно вернуть одинарные кавычки:

String.Format("delete table where date='{0}'", date.ToString("yyyy-MM-dd"));

1 Ответ

3 голосов
/ 18 июня 2019

Основное отличие состоит в том, что это: $"hello {variable}" - это , а не строка. Это FormattableString . И Entity Framework воспользуется этим и будет использовать его для анализа параметров.

String.Format, с другой стороны, создаст новую отформатированную строку без мета-информации, которая была (или должна быть) отформатирована. Не существует хорошего способа для структуры сущностей проанализировать это в параметрах базы данных. Он должен будет отправить его в базу данных как .

Итак, подведем итог: если вы передаете строку, она должна иметь правильное форматирование, чтобы база данных понимала текст. Если вы передадите платформе сущности что-то, что она понимает и сможет проанализировать метаданные, она преобразует ее в параметры базы данных, и вам не нужно надлежащее форматирование, потому что она будет отправлена ​​не как обычный текст, а как текст с параметрами базы данных.

Почему Linq-to-Sql не использует силу FormattableString? Вероятно, потому что это устарело до того, как эта функция вообще существовала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...