web-dev-qa-db-ja.com

コードファーストで文字列インデックスを作成する

Entity Framework 6.1のコードファーストを使用しており、ドメインモデルは次のとおりです。

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

移行にデータベースの更新を使用すると、次のエラーが表示されます。しかし、私が調べた限り_[Index]stringへの注釈として機能します。

テーブル 'dbo.Items'の列 'CreatedBy'は、インデックスのキー列として使用するには無効なタイプです。

36
DarthVader

通常、VARCHAR(Max)を使用するとこのエラーが発生します:

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

nは1〜450です。

86
Talal Yousif

EntityTypeConfigurationまたはmappingsを使用する場合:

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