我正在尝试使用Entity Framework将网站内容保存到我的数据库中。但是,当HTML的长度> 4000,我得到了这些验证错误:
类型的第一次机会异常 发生'System.Data.Entity.Validation.DbEntityValidationException' 在EntityFramework.DLL中WebDev.WebServer40.exe信息:0: 属性:RawData错误:字段RawData必须是字符串或数组 类型的最大长度为'4000'。
知道怎么解决这个问题吗? RawData正在创建为NVARCHAR(4000),但更好的类型是TEXT。我可以以某种方式强行吗?
谢谢!
答案 0 :(得分:7)
我正在使用SQL CE 4.0并且遇到了同样的问题。我设法使用以下DataAnnotation解决它(我喜欢注释:))
public class Page
{
[Key]
public int PageId { get; set; }
[MaxLength]
public string Content { get; set; }
}
现在我可以保存Content属性中的任何内容!
答案 1 :(得分:2)
我们已弃用TEXT
数据类型,而不是NVARCHAR(MAX)
,我会用它来节省自己的重构速度。
http://technet.microsoft.com/en-us/library/bb510662.aspx
SQL CE不支持NVARCHAR(MAX)
,因此它将字符串限制为NVARCHAR(4000)
如果可以使用SQL Server 2008,Entity Framework将从您的字符串中为您生成NVARCHAR(MAX)
列。
答案 2 :(得分:1)
TEXT类型将是更好的选择。然而,与有限的nvarchar相比,这是内存饥渴。
或者你可以使用BLOB,但需要你做一些字符串数据处理。
答案 3 :(得分:0)
您使用的是EF Code First吗?您可以在实体映射文件中指定文本类型。
示例映射文件:
public class CustomerMap : EntityTypeConfiguration<Customer>
{
this.Property(t => t.Description).HasColumnType("text");
}
然后你必须在OnModelCreating方法的dbContext类中注册你的映射文件:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CustomerMap());
base.OnModelCreating(modelBuilder);
}
答案 4 :(得分:0)
我 [几乎] 使用了 Kyle Nunery 的答案,只是因为我需要它来存储 MySql 和大字符串,我认为了解您可以使用什么来代替 "text"
类型会很有用。< /p>
每种数据类型可以存储的最大数据量如下:
TINYTEXT 256 字节
文本 65,535 字节 ~64kb
MEDIUMTEXT 16,777,215 字节 ~16MB
LONGTEXT 4,294,967,295 字节 ~4GB