Question

I have the following model:

public class Blog
{
    public int BlogID { get; set; }
    public int CategoryID { get; set; }

    [MaxLength(70)]
    [Required]
    public string BlogTitle { get; set; }

    [Column(TypeName="ntext")]
    public string BlogContent { get; set; }
}

I have manually set the field BlogContent to be of ntext type (16 bytes) in the SQL CE4 database.

However, every time I try to insert text longer than 4000 characters, it gives the following error:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details

I have tried setting the annotation for [Column(TypeName="ntext")], but this makes no difference. When I loop trough the EntityValidationErrors collection, the problem is caused by BlogContent and the error says:

String cannot be longer than 4000 characters

How can I define my model to have an ntext field for BlogContent?

It seems that any data annotations are ignored; it is assuming that a string with no MaxLength is limited to 4000 characters by default.

Was it helpful?

Solution

I have solved it, you need to use:

[Column(TypeName="ntext")]
[MaxLength]
public string BlogContent { get; set; }

See details here: http://www.cloudonedesign.com/Blog/Post/how-to-define-ntext-fields-using-code-first-in-net-30

In order to create an ntext column in the database, and allow model validation to actually know that the string length can be more than 4,000 characters, we have to use these two items:

[Column(TypeName="ntext")]: This will tell Code-First to generate an ntext field in the database.

[MaxLength]: By using the default constructor, it will take the maximum length of the database field, instead of guessing the maximum length for a string, which is 4,000. If this is missing or you explicitly set the maximum length such as [MaxLength(8000)], model validation will raise errors saying "String maximum length is 4,000 characters".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top