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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top