使用Entity Framework在SQL数据库中保存长字符串

时间:2011-10-18 03:42:35

标签: sql-server entity-framework

我正在尝试使用Entity Framework将网站内容保存到我的数据库中。但是,当HTML的长度> 4000,我得到了这些验证错误:

  

类型的第一次机会异常   发生'System.Data.Entity.Validation.DbEntityValidationException'   在EntityFramework.DLL中WebDev.WebServer40.exe信息:0:   属性:RawData错误:字段RawData必须是字符串或数组   类型的最大长度为'4000'。

知道怎么解决这个问题吗? RawData正在创建为NVARCHAR(4000),但更好的类型是TEXT。我可以以某种方式强行吗?

谢谢!

5 个答案:

答案 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