使用实体框架在 SQL 数据库中保存长字符串
我正在尝试使用实体框架将网站的内容保存到我的数据库中。然而,当HTML的长度> 4000,我收到这些验证错误:
类型的第一次机会异常 发生“System.Data.Entity.Validation.DbEntityValidationException” 在 EntityFramework.DLL WebDev.WebServer40.exe 信息:0: 属性:RawData 错误:RawData 字段必须是字符串或数组 最大长度为“4000”的类型。
知道如何解决这个问题吗? RawData 被创建为 NVARCHAR(4000),但更好的类型是 TEXT。我可以以某种方式强制这样做吗?
谢谢!
I'm trying to save the contents of a website to my database using Entity Framework. However, when the length of the HTML > 4000, I get these validation errors:
A first chance exception of type
'System.Data.Entity.Validation.DbEntityValidationException' occurred
in EntityFramework.DLL WebDev.WebServer40.exe Information: 0 :
Property: RawData Error: The field RawData must be a string or array
type with a maximum length of '4000'.
Any idea how to get around this? RawData is being created as NVARCHAR(4000) but a better type would be TEXT. Can I force that somehow?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我正在使用 SQL CE 4.0 并遇到同样的问题。我设法使用以下 DataAnnotation 解决了这个问题(我喜欢注释:))
现在我可以保存 Content 属性中的任何内容!
I'm using SQL CE 4.0 and having the very same problem. I managed to solve it using the following DataAnnotation (i like annotations :) )
Now i can save whatever content in the Content property!
TEXT
数据类型已被弃用,取而代之的是NVARCHAR(MAX)
,我将使用它来避免日后的重构。http://technet.microsoft.com/en-us/library/bb510662.aspx
SQL CE 不支持
NVARCHAR(MAX)
,因此它将您的字符串限制为NVARCHAR(4000)
如果可以使用 SQL Server 2008 年,实体框架将从字符串中为您生成
NVARCHAR(MAX)
列。The
TEXT
data type has been deprecated in favor ofNVARCHAR(MAX)
, I would use that to save yourself refactoring down the road.http://technet.microsoft.com/en-us/library/bb510662.aspx
SQL CE doesn't support
NVARCHAR(MAX)
so it limits your strings toNVARCHAR(4000)
If it is possible to use SQL Server 2008, Entity Framework will generate
NVARCHAR(MAX)
columns for you from your strings.TEXT 类型将是更好的选择。然而,与有限的 nvarchar 相比,这需要大量内存。
或者,您可以使用 BLOB,但需要您进行一些字符串数据处理。
TEXT type would be a better option. However this is memory hungry compared to a limited nvarchar.
Alternatively you can use BLOB but will require you to do some string data processing.
您使用 EF Code First 吗?您可以在实体映射文件中指定文本类型。
示例映射文件:
然后您必须在 OnModelCreating 方法的 dbContext 类中注册映射文件:
Are you using EF Code First? You can designate the text type in an entity mapping file.
Example mapping file:
Then you have to register your mapping file in your dbContext class in the OnModelCreating method:
我[几乎]使用了 Kyle Nunery 的答案,除了因为我需要它来存储 MySql 和大字符串,我认为知道你还可以使用什么来代替
"text"
类型会很有用。每种数据类型可存储的最大数据量如下:
TINYTEXT 256 字节
TEXT 65,535 字节 ~64kb
MEDIUMTEXT 16,777,215 字节 ~16MB
LONGTEXT 4,294,967,295 字节 ~4GB
I [almost] used Kyle Nunery's answer except that as I needed it for MySql and large strings to be stored, I thought it would be useful to know what else you can use instead of the
"text"
type.The maximum amount of data that can be stored in each data type is as follows:
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB