使用实体框架在 SQL 数据库中保存长字符串

发布于 2024-12-10 14:29:52 字数 374 浏览 0 评论 0原文

我正在尝试使用实体框架将网站的内容保存到我的数据库中。然而,当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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

秋凉 2024-12-17 14:29:52

我正在使用 SQL CE 4.0 并遇到同样的问题。我设法使用以下 DataAnnotation 解决了这个问题(我喜欢注释:))

public class Page
    {
        [Key]
        public int PageId { get; set; }

        [MaxLength]
        public string Content { get; set; }
    }

现在我可以保存 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 :) )

public class Page
    {
        [Key]
        public int PageId { get; set; }

        [MaxLength]
        public string Content { get; set; }
    }

Now i can save whatever content in the Content property!

万劫不复 2024-12-17 14:29:52

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 of NVARCHAR(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 to NVARCHAR(4000)

If it is possible to use SQL Server 2008, Entity Framework will generate NVARCHAR(MAX) columns for you from your strings.

倾城泪 2024-12-17 14:29:52

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.

如日中天 2024-12-17 14:29:52

您使用 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);
}

Are you using EF Code First? You can designate the text type in an entity mapping file.

Example mapping file:

public class CustomerMap : EntityTypeConfiguration<Customer>
{
    this.Property(t => t.Description).HasColumnType("text");
}

Then you have to register your mapping file in your dbContext class in the OnModelCreating method:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Configurations.Add(new CustomerMap());
     base.OnModelCreating(modelBuilder);
}
琉璃梦幻 2024-12-17 14:29:52

我[几乎]使用了 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文