【问题标题】:Ef Core vs Linq on interpolated string插值字符串上的 Ef Core vs Linq
【发布时间】:2019-11-01 00:46:48
【问题描述】:

使用插值字符串发送 sql server 查询,为什么使用 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"));

【问题讨论】:

    标签: c# sql-server linq-to-sql ef-core-2.2


    【解决方案1】:

    主要区别在于:$"hello {variable}" 不是字符串。这是FormattableString。 Entity Framework 将利用这一点并使用它来解析参数。

    String.Format 另一方面将创建一个新的格式化字符串,没有元信息(或应该)格式化什么。实体框架没有将其解析为数据库参数的好方法。它必须将它按原样发送到数据库。

    总结一下:如果你传递一个字符串,它必须有正确的格式,这样数据库才能理解文本。如果您向实体框架传递它可以理解并且可以从中解析出元数据的东西,它会将其转换为数据库参数,并且您不需要适当的格式,因为它不会以纯文本形式发送,而是以带有数据库参数的文本形式发送。

    为什么 Linq-to-Sql 不使用FormattableString 的力量?可能是因为它甚至在此功能存在之前就已被弃用。

    【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2022-01-01
    • 2019-01-17
    • 2020-11-30
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多