.NET MVC: Como definir o campo ntext em Code-First para SQL CE?
-
28-10-2019 - |
Pergunta
Tenho o seguinte modelo:
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; }
}
Eu defini manualmente o campo BlogContent
para ser do tipo ntext
(16 bytes) no banco de dados SQL CE4
.
No entanto, sempre que tento inserir um texto com mais de 4.000 caracteres, ocorre o seguinte erro:
A validação falhou para um ou mais entidades.Veja 'EntityValidationErrors' propriedade para mais detalhes
Eu tentei definir a anotação para [Column(TypeName="ntext")]
, mas isso não faz diferença.Quando faço um loop através da coleção EntityValidationErrors
, o problema é causado por BlogContent
e o erro diz:
A string não pode ter mais de 4.000 caracteres
Como posso definir meu modelo para ter um campo ntext
para BlogContent
?
Parece que quaisquer anotações de dados são ignoradas;presume-se que uma string sem MaxLength
está limitada a 4.000 caracteres por padrão.
Solução
Eu resolvi isso, você precisa usar:
[Column(TypeName="ntext")]
[MaxLength]
public string BlogContent { get; set; }
Veja os detalhes aqui: http: / /www.cloudonedesign.com/Blog/Post/how-to-define-ntext-fields-using-code-first-in-net-30
Para criar uma coluna
ntext
no banco de dados e permitir a validação do modelo para saber de fato que o comprimento da string pode ter mais de 4.000 caracteres, nós tem que usar estes dois itens:
[Column(TypeName="ntext")]
: dirá ao Code-First para gerar um campo ntext no banco de dados.
[MaxLength]
: usando o padrão construtor, terá o comprimento máximo do campo do banco de dados, em vez de adivinhar o comprimento máximo de uma string, que é 4.000. Se isso é ausente ou você definir explicitamente o comprimento máximo, como[MaxLength(8000)]
, a validação do modelo irá geram erros dizendo "O comprimento máximo da string é 4.000 caracteres".