Enumを文字列としてデータベースに格納できました。
builder.Entity<Company>(eb =>
{
eb.Property(b => b.Stage).HasColumnType("varchar(20)");
});
しかし、クエリを実行するときに、EFは文字列を列挙型に解析する方法を知りません。どうすればクエリできますか?
context
.Company
.Where(x => x.Stage == stage)
これは例外です:varchar値 'Opportunity'をデータ型intに変換するときに変換が失敗しました
値の変換機能はEF Core 2.1の新機能です。
値コンバーターを使用すると、データベースの読み取りまたは書き込み時にプロパティ値を変換できます。この変換は、1つの値から同じ型の別の値(たとえば、文字列の暗号化)へ、または1つの型の値から別の型の値へ(たとえば、列挙値とデータベース内の文字列との間の変換)にすることができます。
public class Rider
{
public int Id { get; set; }
public EquineBeast Mount { get; set; }
}
public enum EquineBeast
{
Donkey,
Mule,
Horse,
Unicorn
}
独自の変換を使用できます
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(
v => v.ToString(),
v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));
}
または内蔵コンバーター
var converter = new EnumToStringConverter<EquineBeast>();
modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(converter);
これは、次の回答と同じ質問です EF7は列挙型をサポートしていますか?