Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.NET MVC: How to define ntext field in Code-First for SQL CE?

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.

like image 498
Nestor Avatar asked Jun 16 '11 07:06

Nestor


1 Answers

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".

like image 152
Nestor Avatar answered Oct 02 '22 00:10

Nestor