为啥实体框架在保存到数据库时会截断字符串值?

Posted

技术标签:

【中文标题】为啥实体框架在保存到数据库时会截断字符串值?【英文标题】:Why does Entity Framework truncate string value while saving into database?为什么实体框架在保存到数据库时会截断字符串值? 【发布时间】:2017-04-11 03:19:49 【问题描述】:

我遇到了 Entity Framework 的问题,它在保存到数据库时会截断字符串值

我在 SQL Server 2014 中有数据库列 Description nvarchar(max),在我的模型类中有这样的属性:

public string Description  get; set; 

我用这段代码插入数据库

db.EnitityName.Add(object);
db.SaveChanges();

正常情况下可以保存记录,没有问题,但是当Description属性中字符串超过40k字符时,保存的值会被截断到40k以上的最后一个字符。

例如,我们有一个 50k 字符的字符串,它只保存前 40k 个字符并截断最后 10k 个字符。

是我做错了什么,还是实体框架对字符串长度有限制,或者在 nvarchar(max) 中有数据库限制?

请帮助我,提前感谢您的宝贵时间。

谢谢

【问题讨论】:

如何确定其余部分丢失了? EF 对字符串长度没有限制。 谢谢,好点,当我看到数据库值它不完整的字符串时,它被截断了。这就是问题所在,如果我发送 2-3k 字符串将其全部保存在数据库中,您现在可能会得到更好的主意。 但是如何检查呢?直接用工具查询数据库?另一个 C# 代码?还有什么?简单地询问长度有什么用? 在sql查询中使用select语句或者直接在数据库中打开。两种方式我都检查。 你在Sql Server Management studio中被选中了吗?这确实对您选择的内容有长度限制。尝试select len(Description) from EnitityName 并以这种方式检查大小。 【参考方案1】:

我遇到了同样的问题,但结果是 SQL Server Management Studio 截断了数据,而不是实体框架(正如 Scott Chamberlain 在 cmets 中所说)。通过转到 Query->Query Options 来更改它):

【讨论】:

有类似的问题。正在将一些 356k 字符保存到列中,当查询时 - 我们也只会看到 ~65XXX 字符。以上修复工作完美。谢谢

以上是关于为啥实体框架在保存到数据库时会截断字符串值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在更新现有实体时会出现重复的实体?

为啥Firebird在除法时会截断小数位?

字符串或二进制数据将被截断。该语句已终止。不明白为啥? [复制]

为啥实体框架在保存时锁定表?

保存到 DB、C# 时会丢失十进制精度。我正在使用实体框架 [重复]

实体框架代码第一个值对象持久保存到数据库[重复]