【发布时间】:2019-01-23 00:06:10
【问题描述】:
如果我使用实体框架将字符串写入 SQL Server 表(将现有数据库迁移到 EF),然后在 SQL Server Management Studio 中测量字符串长度,我的字符串太长了。似乎不同的排序规则类型在字符串的末尾添加了一堆空白。
我是否必须明确设置 EF 的排序规则类型?如果是这样,有没有比this更好的方法?
得到默认排序规则:
SELECT SERVERPROPERTY('collation') SQLServerCollation
结果:
SQL_Latin1_General_CP1_CI_AS
我这样测量字符串(返回 51 个字符,当字符串为“Bill”时):
SELECT
LEN(CONCAT(first_name, '!' COLLATE SQL_Latin1_General_CP1_CI_AS))
FROM
[GreenCardSite].[dbo].[AppUser]
WHERE
user_id = 16840
请注意!被添加到字符串的末尾,因为默认情况下 SQL Server 在计算长度时不测量空格。此外,当我在没有指定排序规则的情况下运行它时,我得到了一个错误:
无法解决 concat 操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_100_CI_AS”之间的排序规则冲突。
AppUserEF类:
[Table("AppUser")]
public partial class AppUser
{
[Key]
public int user_id { get; set; }
[StringLength(50)]
public string first_name { get; set; }
[StringLength(50)]
public string last_name { get; set; }
.....
【问题讨论】:
-
AppUser的列数据类型是什么? -
有趣。我不知道发生了什么事。您确定它与 ANSI_PADDING 设置无关吗? docs.microsoft.com/en-us/sql/t-sql/statements/…
-
那是什么让你觉得你的专栏末尾没有空格?
-
@DavidG,我在上面添加了部分类声明。而且我确定没有空格,因为我在运行测试之前使用 EF 显式更新了值并硬编码了字符串“Bill”。
-
注意这与Entity Framework无关,底层SQL类型是什么?
标签: c# sql-server entity-framework