Ensemble EF6 le Premier Code des chaînes couramment le type de données nvarchar(max)
Je suis en train de construire un EF6 le premier code modèle à l'aide de l'API fluent. Ma compréhension est, par défaut, les chaînes seront de type nvarchar(max), ce qui (pour être franc) est stupide pour un défaut. J'ai donc ajouté la convention ci-après code de max par défaut de la longueur de 255 caractères:
modelBuilder.Properties<string>()
.Configure(p => p.HasMaxLength(255));
Puis j'ai créé un décorateur comme suit:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class TextAttribute : Attribute
{
}
Je veux appliquer cette spécifique des propriétés de la chaîne que je veux réellement être de type NVARCHAR(MAX).
Que dois-je mettre dans l'API fluent pour s'assurer que toutes les propriétés de la chaîne avec le [Texte] décorateur sont intégrées dans la base de données avec le type de données NVARCHAR(MAX)? Je suppose que ce serait quelque chose comme ceci:
modelBuilder.Properties<string>()
.Where(p => p.CustomAttributes.Any(a => typeof(TextAttribute).IsAssignableFrom(a.AttributeType)))
.Configure(p => p.HasMaxLength(?????));
Ou suis-je le faire complètement tort?
- Est l'aide de l'effectif de type nvarchar(max), à la limite de longueur de mal? 2^30-1
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si vous avez trouvé une réponse maintenant, mais au cas où quelqu'un d'autre est de se demander comment faire, il suffit de définir le type de données SQL, et d'ignorer la HasMaxLength() invocation.
À l'aide de IsMaxLength() ou HasMaxLength(null) permettrait de définir le champ type de données nvarchar(4000) (varchar(8000) si vous spécifiez le type de données varchar).
Si vous le faites à l'intérieur d'un
EntityTypeConfiguration<MyEntity>
classe, il est similaire à @RickNo réponse, mais est fait de cette manière:Il existe une méthode pour indiquer que vous utilisez au maximum autorisé par la base de données.
IsMaxLength ()
Vous pouvez utiliser HasColumnType
ou vous pouvez utiliser sans aucune HasColumnType ou HasMaxLength.
Il n'est pas nécessaire d'utiliser HasMaxLength