【发布时间】:2019-11-05 22:51:43
【问题描述】:
我正在写一个基于ef-core 2.2的数据层,需要兼容SqlServer和Oracle。
当调用具有复杂数据格式(如二进制)或输出参数的SP时,需要创建一个SqlParameter实例。参数名称以 @ 或 # 开头,具体取决于所选数据库的类型。
为了数据库兼容性,如何避免使用前缀@或#?
谢谢。
【问题讨论】:
-
我已经很久没有对 EF 做任何重要的工作了,所以我只会把它作为评论。从 C# 中执行 Sql 时,我从来不需要在 C# 中为参数名称添加前缀,只需根据数据库(MSSql、Oracle、MySQL)的 Sql 语言规则为执行的 Sql 中的参数添加前缀,例如: .Parameters.Add("myParam", myValue);
-
SqlParameter确实不需要名称以@为前缀。该前缀在协议级别是必需的,但如果SqlCommand不以@开头,则会在执行之前在内部修复名称。 (不知道它在 EF 中是如何工作的。)Oracle 不会接受SqlParameter——这种类型是特定于 SQL Server 提供程序的。如果您想与数据库无关,则需要DbParameter。
标签: c# sql-server oracle entity-framework-core ef-core-2.2