web-dev-qa-db-fra.com

Créer un index de chaîne avec le code en premier

J'utilise le code Entity Framework 6.1 en premier et mon modèle de domaine est ci-dessous.

class Item
{
    [Index]
    public string CreatedBy { set; get; }
} 

Lorsque j'utilise update-database pour la migration, j'obtiens l'erreur suivante. Cependant, pour autant que j'ai fait des recherches [Index] devrait fonctionner comme annotation à string.

La colonne 'CreatedBy' de la table 'dbo.Items' est d'un type qui n'est pas valide pour une utilisation comme colonne clé dans un index.

36
DarthVader

Habituellement, vous obtenez cette erreur lorsque vous utilisez un VARCHAR (Max), essayez d'utiliser:

[Column(TypeName = "VARCHAR")]
[StringLength(n)]
[Index]
public string CreatedBy { set; get; }

où n est compris entre 1 et 450.

86
Talal Yousif

Si vous utilisez les mappages EntityTypeConfiguration aka:

public class MyPocoEntitiyTypeConfig<T> : EntityTypeConfiguration<T> where T:class
{

}

public class MyPocoEnt
{
    public virtual string MyProp { get; set; }
}

public class MyPocoEntMapping : MyPocoEntitiyTypeConfig<MyPocoEnt>
{
    public MyPocoEntMapping()
    {
            Property(x => x.MyProp).HasMaxLength(300);
            Property(x => x.MyProp).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("MyProp") { IsUnique = true }));
        }
    }
}
4
Ognyan Dimitrov