使用双引号和单引号保存字符串从EF到SQL

VSO*_*VSO 4 c# sql entity-framework

问题的焦点是string text格式,其他一切都只是用于上下文.如果重要的话,实际的字符串长约10页.

string text = @"
    "" My string ''stringy'' with lots of ''quoties'' "" said Jimmy ''The Jimminator'' Smith.
";

API.Models.Table seedTable = new API.Models.Table()
{
    Created = new DateTimeOffset(DateTime.Now),
    TableText = text
};

db.Table.AddOrUpdate(seedTable);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这是处理从EF到SQL的单引号和双引号保存字符串的正确方法吗?如果没有,那么正确的方法是什么?db只是我们的dbContext.

编辑:这个问题可能并不清楚.我担心的是,当我在SQL Server中发出查询或从C#执行SQL命令时,我不能用单引号输入任何字符串而不加倍.但是,我的问题是EF是否足够聪明,可以用单引号保存字符串或者需要将它们加倍.

Jon*_*nna 5

从.NET到SQL是担心EF的问题.什么字符特殊以及如何逃避它们的规则因数据库而异,但在每种情况下,EF都有代码来处理它.

因此,您根本不需要担心'SQL中的特殊问题.

因此,您需要担心的是如何在.NET中编写有效的字符串.如果@在字符串之前使用具有逐字字符串文字,则所有字符都按原样处理,除了"被转义为"".

如果没有,则不允许使用换行符或引号,但可以使用以下转义来转义它们:

  1. \u 后跟四个十六进制数字:具有该代码点的字符
  2. \U 后跟八个十六进制数字:具有该代码点的字符.
  3. \x 后跟一到四个十六进制数字:具有该代码点的字符.
  4. \a\u0007(钟)相同
  5. \b\u0008(退格)相同
  6. \f\u000C(换页)相同
  7. \n\u000A(换行符)相同
  8. \r\u000D(回车)相同
  9. \t\u0009(标签)相同
  10. \v\u000B(垂直标签)相同
  11. \'\u0027(撇号)相同
  12. \"\u0022(引号)相同
  13. \\\u005C()相同
  14. \0\u0000(空字符)相同

并非所有这些都是字符串所必需的,所以你可以使用'而不是\'但它们被允许难以键入,难以区分(如何从某些空格中分辨标签?)或在其他情境中不允许(你需要\'在字符中)文字).

你的例子:

string text = @"
    "" My string ''stringy'' with lots of ''quoties'' "" said Jimmy ''The Jimminator'' Smith.
";
Run Code Online (Sandbox Code Playgroud)

是相同的:

string text="\n    \" My string ''stringy'' with lots of ''quoties'' \" said Jimmy ''The Jimminator'' Smith.\n";
Run Code Online (Sandbox Code Playgroud)

或者也许是:

string text="\n\t\" My string ''stringy'' with lots of ''quoties'' \" said Jimmy ''The Jimminator'' Smith.\n";
Run Code Online (Sandbox Code Playgroud)

因为在第一个新线之后你是否想要空格或标签,所以不清楚SO的标记.

其中任何一个都是完全相同的,但是如果你有的原因''是为了逃避SQL,那么你不应该把它留给EF担心.有了这个,你是否有:

string text = @"
    "" My string 'stringy' with lots of 'quoties' "" said Jimmy 'The Jimminator' Smith.
";
Run Code Online (Sandbox Code Playgroud)

要么:

string text="\n    \" My string 'stringy' with lots of 'quoties' \" said Jimmy 'The Jimminator' Smith.\n";
Run Code Online (Sandbox Code Playgroud)

纯粹是你发现更容易写和阅读的问题.

一般来说,我建议你在大多数时候使用后一种形式,但是@在文本中有很多新行,或者有很多\字符的情况下,使用verbatim()形式(正则表达式和Windows)文件路径,例如).