为啥实体框架在保存到数据库时会截断字符串值?
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 字符。以上修复工作完美。谢谢以上是关于为啥实体框架在保存到数据库时会截断字符串值?的主要内容,如果未能解决你的问题,请参考以下文章
字符串或二进制数据将被截断。该语句已终止。不明白为啥? [复制]